如何自动将用户定义的对象存储到地图中?

我正在创建一个小程序,它允许您插入自己的多项选择题,并且可以通过另一种方法向您提出这些问题。 所以我用构造函数、一个 toString() 方法和一个可以问我这些问题的方法来设置我的“问题类”。 我现在的问题是我必须以某种方式存储问题,因为问题参数之一是整数“优先级”,如果你回答正确或错误,它会改变。 我想到了一张地图,如下所示,但我不知道如何正确设置它,因此它会自动将新创建的问题存储到此地图中。 也许我必须创建另一个方法来做到这一点,但我想找到一种不调用额外方法的方法。 下面的代码显示了我如何在 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;


}


有只小跳蛙
浏览 80回答 2
2回答

婷婷同学_

我建议不要将对象添加到构造函数内的Map中。一个原因是单一责任原则。你的构造函数将执行 2 项操作(初始化对象并将其添加到 Map)。这是一种不好的做法,特别是因为方法的名称(在你的例子中是构造函数)没有清楚地说明它的作用。另一个原因是在构造函数中使用“this”。您应该非常小心,因为这可能会导致问题非常难以调试。原因是:当您仍在构造函数中时,您的对象(因此“this”)尚未完全初始化。因此,您正在将未完全初始化为参数的对象传递给方法。正如我所说,这可能会导致大问题。如果你真的需要一次性完成所有操作,你可以在你的类中创建一个静态方法,如下所示:&nbsp; &nbsp;public static addQuestion(String que, String[] ans, int sol, double prio){&nbsp; &nbsp; &nbsp; int key = Database.size();&nbsp; &nbsp; &nbsp; Database.put(key, new Question (que, ans, sol, prio));&nbsp; &nbsp;}然后,您可以这样称呼它:&nbsp; &nbsp;Question.addQuestion("What is the right answer?",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new String[] { "1", "2", "3", "4" }, 3, 1.0);

慕少森

从您的评论中,要自动将其插入到地图中,请使用:public class Question {&nbsp; &nbsp;static int keyCount;&nbsp;&nbsp; &nbsp;public Question(String que, String[] ans, int sol, double prio){&nbsp; &nbsp; &nbsp; this.question = que;&nbsp; &nbsp; &nbsp; this.answers = ans;&nbsp; &nbsp; &nbsp; this.solution = sol;&nbsp; &nbsp; &nbsp; this.priority = prio;&nbsp; &nbsp; &nbsp; Database.put(++keyCount, this);&nbsp; &nbsp;}}在这里,每次创建新对象时,我们都会在地图中插入一个条目。引用当前创建的对象。this静态变量用于在每次创建对象时递增键的值。keyCount
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java