gpt4 book ai didi

java - 如何自动将用户定义的对象存储到 map 中?

转载 作者:行者123 更新时间:2023-11-30 05:42:12 25 4
gpt4 key购买 nike

我正在创建一个小程序,它允许您插入自己的多项选择题,并且可以通过另一种方法向您询问这些问题。所以我用构造函数、一个 toString() 方法和一个可以问我这些问题的方法设置了我的“问题类”。我现在的问题是,我必须以某种方式存储问题,因为问题参数之一是整数“优先级”,如果您回答正确或错误,它就会改变。

我想到了一张 map ,如下所示,但我不知道如何正确设置它,因此它会自动将新创建的问题存储到这张 map 中。也许我必须创建另一个方法来执行此操作,但我想找到一种不调用额外方法的方法。下面的代码显示了如何在 main 方法以及 Question 类的数据字段和构造函数中创建一个新问题。

因此,在这个示例中,我想将问题 number1 保存到 Map 数据库中。我不想手动执行此操作。

public static void main(String[] args) {

Question number1 = new Question("What is the right answer?",
new String[] { "1", "2", "3", "4" }, 3, 1.0);
}

public class Question {

public String question;
public String[] answers;
public int solution;
public double priority;
public static Map<Integer, Question> Database = new TreeMap<Integer,Question>();

public Question(String que, String[] ans, int sol, double prio){
this.question = que;
this.answers = ans;
this.solution = sol;
this.priority = prio;

}

最佳答案

我建议不要将对象添加到构造函数内的 Map 中。原因之一是单一职责原则。你的构造函数会做两件事(初始化一个对象并将其添加到 Map 中)。这是一个不好的做法,特别是因为方法的名称(您的例子中的构造函数)没有清楚地说明它的作用。另一个原因是在构造函数中使用“this”。这样做应该非常小心,因为它可能会导致非常难以调试的问题。原因是:当您仍在构造函数中时,您的对象(因此“this”)尚未完全初始化。因此,您将一个未完全初始化的对象作为参数传递给方法。正如我所说,这可能会导致大问题。

如果您确实需要同时完成所有操作,您可以在类中创建一个静态方法,如下所示:

   public static addQuestion(String que, String[] ans, int sol, double prio){
int key = Database.size();
Database.put(key, new Question (que, ans, sol, prio));
}

然后您可以像这样调用它:

   Question.addQuestion("What is the right answer?",
new String[] { "1", "2", "3", "4" }, 3, 1.0);

关于java - 如何自动将用户定义的对象存储到 map 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55441268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com