更有效的存储价值方式?

时间:2011-08-21 20:14:18

标签: java store

我在考虑制作数学课程。它将从一组问题中提出一个随机问题,然后验证答案。以下是我到目前为止的情况:

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};

(它通常不像这样间​​隔;我这样做只是为了显示哪些答案与哪个问题有关)

是否有更有效的方法(我只对存储数据感兴趣,检索它)?

2 个答案:

答案 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.
}