gpt4 book ai didi

java - 以这种方式使用多个构造函数是否正确?

转载 作者:行者123 更新时间:2023-12-01 17:58:35 25 4
gpt4 key购买 nike

我不太确定这是如何工作的,但是如果我想提供为类的对象提供更多或更少变量的选项,这可以与像这样的多个构造函数一起使用吗?

假设我想创建一个多项选择问卷,但我不知道我的用户想要输入多少个答案,也许是 2,3,4,5,6?因此:

public class Quiz {
private int counter;
private String question;
private String answer1;
private String answer2;
private String answer3;
private String answer4;
private String answer5;
private String answer6;
private String rightAnswer;

public Quiz(int counter,String question, String answer1, String answer2, String rightAnswer){
super();
this.counter = counter;
this.question = question;
this.answer1 = answer1;
this.answer2 = answer2;
this.rightAnswer = rightAnswer;
}
public Quiz(int counter, String question, String answer1, String answer2, String answer3, String rightAnswer) {
super();
this.counter = counter;
this.question = question;
this.answer1 = answer1;
this.answer2 = answer2;
this.answer3 = answer3;
this.rightAnswer = rightAnswer;
}
public Quiz(int counter, String question, String answer1, String answer2, String answer3, String answer4,
String rightAnswer) {
super();
this.counter = counter;
this.question = question;
this.answer1 = answer1;
this.answer2 = answer2;
this.answer3 = answer3;
this.answer4 = answer4;
this.rightAnswer = rightAnswer;
}
//...more options

也许我可以只用某种枚举或开关做 1 个构造函数?归根结底,在尝试此方法后,由于某种原因,将其放入 HashMap 中,然后将其序列化到文件不起作用,与 1 个构造函数一样,它可以工作,但不会写入所有内容在那里。我对问题所在感到有点困惑,也许这与我的 toString 覆盖有关,但无论如何,请告诉我这个问题,这样我就不用再担心一个令人困惑的问题了。

最佳答案

对于您发布的代码,这将是一个简单的方法:

package com.steve.research;

public class Quiz {

private int counter;
private String question;
private String answer1;
private String answer2;
private String answer3;
private String answer4;
private String answer5;
private String answer6;
private String rightAnswer;

public Quiz(int counter, String question, String answer1, String answer2, String rightAnswer) {
this(counter, question, answer1, answer2, null, null, rightAnswer);
}

public Quiz(int counter, String question, String answer1, String answer2, String answer3, String rightAnswer) {
this(counter, question, answer1, answer2, answer3, null, rightAnswer);
}

public Quiz(int counter, String question, String answer1, String answer2, String answer3, String answer4, String rightAnswer) {
this.counter = counter;
this.question = question;
this.answer1 = answer1;
this.answer2 = answer2;
this.answer3 = answer3;
this.answer4 = answer4;
this.rightAnswer = rightAnswer;
}
}

要获得改进的方法,我建议您查看“varargs”来查找问题。由于您的问题数量不定,因此您可以将 String ... questions 作为最后一个构造函数参数(因此 rightAnswer 必须放在前面)。

public class Quiz {

private int counter;
private String question;
private String rightAnswer;
private String[] answers;

public Quiz(int counter, String question, String rightAnswer, String... answers) {
this.counter = counter;
this.question = question;
this.rightAnswer = rightAnswer;
this.answers = answers;
}

public static void main(String[] args) {
new Quiz(1, "one plus one", "two", "one", "two", "three");
new Quiz(1, "one plus one", "two", "one", "two", "three", "four");
new Quiz(1, "one plus one", "two", "one", "two", "three", "four", "five");
}
}

请注意,answers 现在是一个字符串数组 String[],您可以引用 answers.lengthanswers[0] 等等。

还有一点评论:在构造函数中调用无参数 super() 通常是多余的(您不需要它们)。

关于java - 以这种方式使用多个构造函数是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42691603/

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