我在考虑制作数学课程。它将从一组问题中提出一个随机问题,然后验证答案。以下是我到目前为止的情况:
String[] questions = {"3 * 19", "21 * 9", "7 * 4", "349274 * 0", "16 / 2", "3 + 86", "5 - 9"};
int[] answers = {57, 189, 28, 0, 8, 89, -4};
(它通常不像这样间隔;我这样做只是为了显示哪些答案与哪个问题有关)
是否有更有效的方法(我只对存储数据感兴趣,不检索它)?
答案 0 :(得分:2)
这应该这样做:
Map<String,Integer> map = new HashMap<String, Integer>(){{
put("3 * 19", 57);
put("21 * 9", 189);
put("7 * 4", 28);
put("349274 * 0", 0);
put("16 / 2", 8);
put("3 + 86", 89);
put("5 - 9", -4);
}};
来自@Bruno Reis的快速说明:
请注意,这会创建一个继承自HashMap的匿名内部类。因此,它对已创建它的类的实例有一个(非瞬态)引用,如果您尝试序列化地图,则可能会出现问题。
更新:以下是检索随机问题值的方法:
Random generator = new Random();
Object[] values = map.values().toArray();
int randomAns = values[generator.nextInt(value.length)];
答案 1 :(得分:2)
我的建议是创建一个专门的类来存储问题和答案,将它们存储在List
中并使用Collections.shuffle
来改变问题。
与依赖于shuffle
内部存储问题的顺序相比,使用HashMap
提供了每次运行应用程序时更均匀的问题分布(对于给定的JVM,这很可能是相同的)实现)。
此外,从OO角度来看,将问题和答案封装在一起更好。
public class Question {
private final String question;
private final int answer;
public Question(String question, int answer) {
this.question = question;
this.answer = answer;
}
public String getQuestion() { return question; }
public int getAnswer() { return answer; }
}
然后填充问题列表,随机播放和迭代:
// Use ArrayList as it supports random access for efficient element swapping:
List<Question> questions = new ArrayList<Question>();
questions.add(new Question("3 * 19", 57));
// etc.
Collections.shuffle(questions);
for (Question qn : questions) {
System.out.println(qn.getQuestion());
// Prompt for answer, etc.
}