【问题标题】:Basic structure/syntax/method help. Class for basic quiz基本结构/语法/方法帮助。基础测验类
【发布时间】:2013-11-11 15:58:29
【问题描述】:

我是 Java 新手,需要帮助来理解一些事情。这是我设计用于在测验中返回多个分数的类的代码。

import java.util.ArrayList;

import java.util.ArrayList;
/**Contains methods to create an ArrayList of possible answers ask a question and mark it accordingly
 * @author Ben Fowler
 * @version
 */

public class ExamQuestionNumerical extends ExamQuestion{


public ExamQuestionNumerical(String question, int maximalMark, int correctAnswer) {
    super(question, maximalMark);
    // TODO Auto-generated constructor stub
}
ArrayList<Integer> answer = new ArrayList<Integer>();
ExamQuestionNumerical q1 = new ExamQuestionNumerical("10 - 6 = ?", 3, 1);

private int addAnswer(){
    /**Adds 3 possible answers to the ArrayList
     * @returns void
     */
    answer.add(3);
    answer.add(4);
    answer.add(5);
}

private int returnMarks(correctAnswer){
    /**
     * @returns either max marks for a correct answer or 0 for incorrect.
     */
    if (q1.answer = 1){
        return maximalMark;
    }else {return 0;}
}

现在,显然问题出在底部方法上,我只需要为问题返回一个标记。我(想我)已经在 ArrayList 中存储了 3 个可能的答案,并且需要一种方法来根据是否选择了正确的答案来返回分数。我知道我缺少结构/语法/更多的基本知识,但请帮忙,我可以花几个小时的研究在圈子里或在一些指导下,实际上到达某个地方。谢谢

【问题讨论】:

  • 您能否包含一个运行此类的主要方法,以及所需的和实际的输出。也可能是ExamQuestion。如果可以将其缩减为一个独立的小型示例,那就太好了
  • if (q1.answer = 1) 这部分是我们正在研究的,是吗?据我所知,答案是一个 ArrayList(将其设置为 1 不会运行)。您有一个答案列表和正确答案(可能是索引或整数)。您的“目标”应该是评估 correctAnswer 是否与 q1 答案一致。您还需要一个输入/字段来存储学生的回答。
  • 一些注意事项: 1. 在构造函数中,你传递了正确答案,但不做任何事情?当然,您应该将其存储在某个地方。 2. addAnswer 应该返回一个 int。您希望此方法的功能是什么? 3. returnMarks(correctAnswer) 语法无效,必须指定参数的类型。 4. (q1.answer = 1) 无效 -> 在 Java 中,比较运算符是 '=='。此外,您正在将 int 与 List 进行比较

标签: java methods arraylist


【解决方案1】:

您的代码存在几个问题。这是一个包含其中几个的列表:

  1. 您的 addAnswer() 方法应该返回 void 而不是 int,因为它目前没有返回任何东西。

  2. 您需要为returnMarks 方法的correctAnswer 参数提供一个类型。我猜int 可能是合适的。

  3. 语句if (q1.answer = 1) 应该是if (q1.answer == 1),注意用于比较的双等号。单等号用于赋值。

  4. 您正在类中创建ExamQuestionNumerical 的实例(命名为q1)。这似乎很奇怪。这会导致错误,因为您没有在其上调用 addAnswer(),但您在 returnMarks 方法中引用它。我建议您不需要在类中创建实例 - 在某处的测试类中的 main() 方法中创建实例。

  5. 你真的应该在课堂上将你的字段标记为private。在这种情况下,answer 可能应该是私有的。约定规定字段定义首先出现在您的类中,高于您的构造函数。

确保您使用 IDE(例如 Eclipse)来编写代码。由于连续的后台编译,这可以确保自动检测到许多问题。

【讨论】:

  • 谢谢,我已经记录了所有这些内容并进行了相应的修改。我仍然遇到问题,但回答非常有帮助,我更接近欢呼。