对于我的班级,我必须编写一个程序来对用户进行3个与Java有关的多项选择题的测验。每次程序执行时,问题应以随机顺序显示给用户。
问题的基础由Question类构成,我基本上已经“完成”了,文件已经编译。但是,我的老师建议我们使用访问器方法,这些方法会将不同的字段返回给main。通常,这没有问题,因为只有一个确定的对象可以返回到main。但是,如果不确定程序将显示哪个对象,应该如何返回变量?
我试图使用诸如此类的代码将实际问题放到Question类而不是我的主类中,这将使对访问器的需求过时,因为所有内容都在同一类中。
question = this.question;
this.question = ("Which of these is not a primitive data type?");
choiceA = this.choiceA;
this.choiceA = ("string");
但是,为了减少Question类中的代码重复性,我将实际的问题移到了主类中,因此仍然需要访问器。我在主类中使用arrayList,然后使用Collections.Shuffle,将问题输入到其中,然后随机化。我想将随机问题打印给用户,但是这样做我仍然需要访问器。不过,此时代码已经随机化了。我不确定如何从Question类中获取与正确的随机问题相对应的数据,然后将其显示给用户(希望这是有道理的)。到目前为止,这是Question类:
// declare fields for the class
private String question; // ex: "Which is not a primitive data type?"
private String choiceA; // ex: "string"
private String choiceB; // ex: "boolean"
private String choiceC; // ex: "long"
private String choiceD; // ex: "char"
private String correctAns; // ex: "string"
// constructor for the question
public Question(String question, String choiceA, String choiceB, String choiceC, String choiceD, String correctAns)
{
question = this.question;
choiceA = this.choiceA;
choiceB = this.choiceB;
choiceC = this.choiceC;
choiceD = this.choiceD;
correctAns = this.correctAns;
}
// accessor method for retrieving the question
public String getQuestion()
{
return question;
}
// accessor method for retrieving the first choice of the question
public String getChoiceA()
{
return choiceA;
}
// accessor method for retrieving the second choice of the question
public String getChoiceB()
{
return choiceB;
}
// accessor method for retrieving the third choice of the question
public String getChoiceC()
{
return choiceC;
}
// accessor method for retrieving the fourth choice of the question
public String getChoiceD()
{
return choiceD;
}
// accessor method for retrieving the correct answer to the question
public String getCorrectAns()
{
return correctAns;
}
如果有帮助,请参考以下项目指南:“创建一个可以在主方法中实例化为三个Question对象的Question类。将Question对象存储在数组或arraylist中。然后随机播放Questions每次播放该节目时订购。”没有明确的方向可以在主类或问题类中编写实际问题(例如:“什么不是原始数据类型?”),但是我仍然不确定哪一个是最有效的。
编辑说明:
我想要的输出将是随机排列的三个问题,例如:
其中哪些不是Java关键字?
switch-case语句必须以什么结尾?
其中哪些不是原始数据类型?
每次程序运行时,用户以不同的顺序回答这些问题。使用访问器,这些随机字段(“其中哪些不是原始数据类型”,然后是所有后续答案)必须全部以不同的顺序返回到主类。我不知道该怎么做,因为访问器通常会访问确定的值。
此外,这是我拥有的用于创建问题对象并将其放入arrayList的代码。我实际上还没有输入实际数据,但这本质上是应该的样子。
// Create an ArrayList which will store the Question objects
ArrayList<Question> questionList = new ArrayList<Question>();
// Add 3 questions to the ArrayList using a for-loop
for (int counter = 0; i < 3; counter++)
{
questionList.add(new Question(String question, String choiceA, String choiceB, String choiceC, String choiceD, String correctAns));
}
// randomize the order of the questions in the ArrayList
Collections.shuffle(questionList);
答案 0 :(得分:1)
在构造函数中,您的分配是向后的。您当前正在用存储的类成员替换传入的参数。切换它们,以便为类成员分配传入的值:
// constructor for the question
public Question(String question, String choiceA, String choiceB, String choiceC, String choiceD, String correctAns)
{
this.question = question;
this.choiceA = choiceA;
this.choiceB = choiceB;
this.choiceC = choiceC;
this.choiceD = choiceD;
this.correctAns = correctAns;
}
“ this”是指该类的当前实例,因此是“。”之后的变量名。是班级成员。