为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

有只小跳蛙 2022-09-14 16:44:50
我正在创建一个小程序,它允许您插入自己的多项选择题,并且可以通过另一种方法向您提出这些问题。 所以我用构造函数、一个 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;}
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞


我建议不要将对象添加到构造函数内的Map中。一个原因是单一责任原则。你的构造函数将执行 2 项操作(初始化对象并将其添加到 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);


查看完整回答
反对 回复 2022-09-14
?
慕少森

TA贡献2019条经验 获得超9个赞

从您的评论中,要自动将其插入到地图中,请使用:


public class Question {


   static int keyCount; 


   public Question(String que, String[] ans, int sol, double prio){

      this.question = que;

      this.answers = ans;

      this.solution = sol;

      this.priority = prio;

      Database.put(++keyCount, this);

   }


}

在这里,每次创建新对象,我们都会在地图中插入一个条目。

  1. 引用当前创建的对象。this

  2. 静态变量用于在每次创建对象递增键的值。keyCount


查看完整回答
反对 回复 2022-09-14
  • 2 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信