向用户显示随机对象时使用访问器方法?

时间:2019-04-10 01:10:29

标签: java

对于我的班级,我必须编写一个程序来对用户进行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关键字?

  • A)开关
  • B)键盘
  • C)浮动
  • D)是

switch-case语句必须以什么结尾?

  • A)开关
  • B)休息
  • C)继续
  • D)其他

其中哪些不是原始数据类型?

  • A)字符串
  • B)布尔值
  • C)长
  • D)Char

每次程序运行时,用户以不同的顺序回答这些问题。使用访问器,这些随机字段(“其中哪些不是原始数据类型”,然后是所有后续答案)必须全部以不同的顺序返回到主类。我不知道该怎么做,因为访问器通常会访问确定的值。

此外,这是我拥有的用于创建问题对象并将其放入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);

1 个答案:

答案 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”是指该类的当前实例,因此是“。”之后的变量名。是班级成员。