存储多种不同类型数据的Java 2D数组
这是我的第一个问题。。因此,任何帮助(关于发布风格或给定问题)都是非常感谢的 所以。。我对Java不是很“新”,但有些事情我不知道 我有一个关于如何存储以下内容的问题: “以下哪项是水果”、“橘子”、“砖头”、“老虎”、“以及某种正确答案的表示)”。 请记住,这类记录不会超过20条,所以我会将它们静态地手工输入,而不是动态地输入 我在考虑使用2d阵列,但它如何工作以及将如何工作。我的导师还说2d阵列将是最好的方式(我认为他期待2d阵列,即使有更好的方式)。。。他还说,它必须尽可能简单,因此必须阻止使用Java的任何奇特方式 我可以管理2d阵列部分但是我如何指出正确的答案呢?某种布尔值加上true或false 收集用户的答案并进行检查对我来说不是什么大问题 我想听听你对如何处理这项任务的建议。谢谢大家! p、 它一定是applet能够处理的 编辑: 好的,伙计们。。我去了2d数组这里是代码:存储多种不同类型数据的Java 2D数组,java,arrays,boolean,2d,Java,Arrays,Boolean,2d,这是我的第一个问题。。因此,任何帮助(关于发布风格或给定问题)都是非常感谢的 所以。。我对Java不是很“新”,但有些事情我不知道 我有一个关于如何存储以下内容的问题: “以下哪项是水果”、“橘子”、“砖头”、“老虎”、“以及某种正确答案的表示)”。 请记住,这类记录不会超过20条,所以我会将它们静态地手工输入,而不是动态地输入 我在考虑使用2d阵列,但它如何工作以及将如何工作。我的导师还说2d阵列将是最好的方式(我认为他期待2d阵列,即使有更好的方式)。。。他还说,它必须尽可能简单,因此必须阻
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.我知道网格布局有点“怪异”,但它可以工作……) 当然,有更好的方法可以做到这一点,比如使用一个可以让你映射“橙色”->true/false的地图 但是,如果必须是二维阵列,则可以执行以下操作:
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;
这是一种有意义的东西。这使你能够以一种有意义的方式将问题与答案配对。这不是一个2D数组,但这里没有什么特别的东西。然后可以将这些问题对象存储在1D数组中
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"));
}
}
公开课问题{
字符串问题;
List allAnswers=new ArrayList();
字符串正确答案;
公开问题(字符串问题、字符串正确答案、列出错误答案){
这个问题=问题;
this.correctAnswer=correctAnswer;
allAnswers.addAll(错误答案);
//随机添加正确答案(这样在打印选项时,它并不总是第一个)
随机rnd=新随机();
allAnswers.add(rnd.nextInt(errorAnswers.size()),correctAnswer);
}
公共布尔值isCorrectAnswer(字符串答案){
返回correctAnswer.equalsIgnoreCase(答案);
}
@凌驾
公共字符串toString(){
//字符串生成器会更好,但可能构成“幻想”
字符串questionString=问题;
for(字符串答案:allAnswers){
questionAsString=questionAsString+“\n”;
问题字符串=问题字符串+答案;
}
返回问题字符串;
}
公共静态void main(字符串[]args){
List incorrectAnswers=new ArrayList();
不正确的回答。添加(“砖块”);
不正确的回答。添加(“老虎”);
问题=新问题(“哪一个是水果”、“橙色”,回答不正确);
System.out.println(问题);
System.out.println();//只需输入一个空行
System.out.println(问题.iscorrect答案(“Brick”);
System.out.println(问题.iscorrect答案(“橙色”);
}
}
在二维数组中,可以将最后一列作为正确答案的索引。然后将索引转换为int并检索正确答案:
格式:
问题,选项1,选项2,选项3,正确的索引
样本记录:
以下哪一个是水果、橘子、砖头、老虎、1
“以下哪一项是汽车”、“乌龟”、“大众”、“鼠标”、“2”
在第一条记录中,“1”是“Orange”(正确答案)的数组索引。在第二条记录中,“2”是“大众”的数组索引。那么这是一组带有多项选择答案的问题吗?你觉得一个
问题对象怎么样?我会用地图来解决这个问题。因为这给了你高效的查找,我认为这只是一个例子。我认为这个问题可能比这更一般。比如下一个可能是“哪一个是最大的数字;5,12,43”关于数字。。。我不敢肯定。。我可以用普通的字符串来完成一个类成员字符串问题
,字符串答案
和java.util.List假人
?保留这些课程的列表。谢谢。。我的笔记本电脑电池电量不足。。我回家后会检查一下。谢谢大家。现在我有点清楚该怎么做了。。我睡着了,也有了同样的想法。。。。我会努力的。。。谢谢你们