【问题标题】:Java 2D array storing many different types of dataJava 2D 数组存储许多不同类型的数据
【发布时间】:2014-05-22 12:49:28
【问题描述】:

这是我的第一个 Stack 问题.. 任何帮助表示赞赏(关于发布风格或给定问题)

所以.. 我在 Java 中并不是真正的“新人”,但有些事情我不知道。

我有一个关于如何存储以下内容的问题: “其中哪个是水果”、“橙色”、“砖”、“老虎”、“(以及某种正确答案的指示)”。

请记住,此类记录不会超过 20 条,所以我会静态而不是动态地手动放入它们

我在考虑使用 2d 数组,但它如何以及将如何工作。我的导师还说 2d 数组将是最好的方法(我认为他期待 2d 数组,即使有更好的方法)......他还说它必须尽可能简单,所以任何花哨的方法必须推迟 Java。

我可以管理 2d 数组部分。但我如何指出正确的答案?某种布尔值是真还是假?

从用户那里收集答案并检查的部分对我来说不是什么大问题。

我想请您就如何处理这项任务提出建议。谢谢!

附言它必须是applet可以处理的东西 编辑: 好的,伙计们..我去了这里的二维数组是代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;

    public class Quiz_applet extends JApplet implements ActionListener {
    static int rez = 0;
    static int c=0;
    static JTextField input = new JTextField(3);
    static String[][] data = {//q1 is in field data[0][0]
    {"q1", "A1", "A2", "A3", "A"},
    {"q2", "A1", "A2", "A3", "B"},
    {"q3", "A1", "A2", "A3", "C"},
    {"q4", "A1", "A2", "A3", "B"},
    {"q5", "A1", "A2", "A3", "C"},
    {"q6", "A1", "A2", "A3", "A"},
    {"q7", "A1", "A2", "A3", "A"},
    {"q8", "A1", "A2", "A3", "B"},
    {"q9", "A1", "A2", "A3", "C"},
    {"q10", "A1", "A2", "A3", "A"},
    {"q11", "A1", "A2", "A3", "A"}

    };
public void init() {     
    ShapeCanvas canvas = new ShapeCanvas();      
    JButton Button = new JButton("Answer!");
    Button.addActionListener(canvas);
    input.addActionListener(canvas);        
    JPanel bottom = new JPanel(); 
    bottom.setLayout(new GridLayout(1,4,3,3));     
    bottom.add(Button);
    bottom.add(input);
    getContentPane().setLayout(new BorderLayout(3,3));
    getContentPane().add("Center",canvas);              
    getContentPane().add("South",bottom);
    setSize(600,300);
}
static class ShapeCanvas extends JPanel
implements ActionListener {
    ShapeCanvas() {

}   
    public void paintComponent(Graphics g) {

if(c==0){
    g.drawString(data[0][0], 50, 100);
    g.drawString(data[0][1], 50, 120);
    g.drawString(data[0][2], 50, 140);
    g.drawString(data[0][3], 50, 160);
}
else if(c!=0){
     g.drawString(data[c][0], 50, 100);
     g.drawString(data[c][1], 50, 120);
     g.drawString(data[c][2], 50, 140);
     g.drawString(data[c][3], 50, 160);
     //repaint();
}


}

    public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub

}
    }   

@Override
public void actionPerformed(ActionEvent evt) {
     String command = evt.getActionCommand();



    if (command.equals("Answer!"))
     {
         if(input.getText().equals(data[c][4]))
     {
     c=+1;
     rez=+1;
     };
         } ;


}
}

点击回答按钮后如何更改问题? 在我的其他项目中,它的工作原理是这样的^。 p.s.2。我知道网格布局有点“奇怪”,但它有效.. :)

【问题讨论】:

  • 那么这是一组带有多项选择答案的问题吗?您如何看待 Question 对象?
  • 我会用 Map 来解决这个问题。因为这为您提供了高效的查找。
  • @Icewind 我认为这只是一个例子。我认为这个问题可能比这更笼统。比如下一个可能是“哪个是最大的数字;5、12、43”
  • 关于数字......我不确定......我可以用普通字符串通过
  • class 与成员 string questionstring answerjava.util.List<string> dummies 怎么样?维护这些类的列表。

标签: java arrays boolean 2d


【解决方案1】:

在二维数组中,您可以将最后一列设为正确答案的索引。然后您将索引转换为 int 并检索正确答案:

格式:

问题,选择1,选择2,选择3,正确索引

样本记录:

“其中哪个是水果”、“橙色”、“砖”、“老虎”、“1”

“其中哪个是汽车”、“Turtle”、“Volkswagen”、“Mouse”、“2”

在第一条记录中,“1”是“Orange”的数组索引(正确答案)。在第二条记录中,“2”是“Volkswagen”的数组索引。

【讨论】:

  • 是的..我去睡觉了,也有同样的想法..会努力的...谢谢你们
【解决方案2】:

当然有更好的方法可以做到这一点,例如使用允许您映射“橙色”的地图 -> 真/假

但是,如果它必须是二维数组,您可以执行以下操作:

private final String YES = "Y";
private final String NO = "N";

String[20][2] fruitData = new String[20][2]();

fruitData[0][0] = "Orange";
fruitData[0][1] = YES;

fruitData[1][0] = "Brick";
fruitData[1][1] = NO;

【讨论】:

    【解决方案3】:

    这是一种有意义的对象。这使您可以以一种有意义的方式将问题与答案配对。它不是 2D 数组,但这里没有什么特别花哨的东西。然后,您可以将这些 Question 对象存储在一维数组中

    public class Question {
        String question;
        List<String> allAnswers=new ArrayList<>();
        String correctAnswer;
    
        public Question(String question,String correctAnswer, List<String> wrongAnswers) {
            this.question = question;
            this.correctAnswer = correctAnswer;
    
            allAnswers.addAll( wrongAnswers);
    
            //add the correct answer somewhere at random (so that when printing the options it isn't always the first one)
            Random rnd=new Random();
            allAnswers.add( rnd.nextInt(wrongAnswers.size()), correctAnswer);
    
        }
    
        public boolean isCorrectAnswer(String answer){
            return correctAnswer.equalsIgnoreCase(answer);
        }
    
        @Override
        public String toString() {
            //string builder would be better but may constitute "fancy"
            String questionAsString= question;
    
            for(String answer: allAnswers){
                questionAsString=questionAsString+"\n";
                questionAsString=questionAsString+answer;
            }
    
            return questionAsString;
        }
    
    
        public static void main(String[] args){
            List<String> incorrectAnswers=new ArrayList<>();
            incorrectAnswers.add("Brick");
            incorrectAnswers.add("Tiger");
    
            Question question=new Question("Which of these is a fruit","Orange", incorrectAnswers);
    
            System.out.println(question);
    
            System.out.println(); //just putting in a blank line
    
            System.out.println(question.isCorrectAnswer("Brick"));
            System.out.println(question.isCorrectAnswer("orange"));
    
        }
    
    
    }
    

    【讨论】:

    • 谢谢.. 我的笔记本电脑电量不足.. 我回家后会检查一下。谢谢你们。现在我对该怎么做有了某种清晰的认识。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 2015-12-19
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    相关资源
    最近更新 更多