【问题标题】:How can I add up the sum of these scores for the final value?如何将这些分数的总和相加得出最终值?
【发布时间】:2012-01-02 16:39:42
【问题描述】:

这是我的第一个代码块,我的主类。我已经创建了问题数组和对象,这只是为了向你们展示我想要完成的工作。

for(int i = 0; i<questionArray.length; i++)
{
  questionArray[i].askQuestion();
  questionArray[i].getAnswer();
  questionArray[i].checkAnswer();
}

这些是我在上面循环中使用的方法:

public void askQuestion()
{
   System.out.println(question);
   System.out.println("This question is worth " + pointValue + " point(s)");
   System.out.println("Please enter your answer: ");
}

public String getAnswer()
{
    return answer;
}

public boolean checkAnswer()
{
  Scanner keyboard = new Scanner(System.in);
  String UserAnswer = keyboard.nextLine();
  if (UserAnswer.equalsIgnoreCase(answer))
  {
    System.out.println("congratulations you have earned " + pointValue + " point(s)\n");
    return true;
  }
  else 
  {
    System.out.println("sorry you did not get the answer correct");
    System.out.println("The correct answer is " + this.answer + "\n");
    return false;
  }
}

如您所见,这是一个TriviaGame 类, 1.)我正在尝试制作两种方法,一种能够在每个问题之后显示pointValue(仅当用户回答==回答时)。 2.)第二个是当用户得到正确答案时,将每个点值(再次当答案相等时。A.k.a checkAnswer == true)相加,并在最后显示所有结果。

【问题讨论】:

    标签: java arrays object methods


    【解决方案1】:

    你的意思是:

     int score += pointValue; // note the plus (+)
    



    顺便说一句,考虑将if (checkAnswer() == true) 更改为if (checkAnswer())

    【讨论】:

      【解决方案2】:

      在您的第一个代码块中,您在 for 循环中运行每个方法,您应该运行 questionArray[i].updateScore() 而不是 questionArray[i].checkAnswer() 。截至目前,您正在运行checkAnswer(),它会从用户那里得到答案并检查它是否正确。但是如果你打算在这之后调用updateScore(),我相信你最终会在if语句的条件下再次运行checkAnswer(),从而再次从用户那里毫无意义地收集答案。通过运行 updateScore() ,您将收集答案并更新分数。我不确定你是否已经知道这一点,但我想我会让你知道以防万一。

      至于你最初的问题,你可以试试这个: 为您的 Question 类创建一个布尔实例变量(初始化为 false),如果他们的答案正确,该变量将设置为 true。这样,您可以遍历您的 questionArray 并检查他们的答案是否正确。如果回答正确,则将问题的pointValue 添加到您的总分中。

      我希望我理解您的问题,希望对您有所帮助,
      泰勒

      【讨论】:

      • 每次我使用 updateScore 时,我必须在回答每个问题后按 Enter,即使我按照您的建议进行操作。程序在没有任何 updateScore 方法的情况下运行顺利......但我仍然需要找到一种方法来跟踪分数,我设置它的方式不起作用,我的 checkAnswer() 方法是否错误?
      • 您可以在您的驱动程序类中有一个变量来跟踪运行总数(假设它被声明为 int total = 0; 然后,让您的 checkAnswer() 方法返回一个 int(即,点如果回答正确,则为问题的值,否则为 0) 而不是布尔值。因此,在您的 for 循环中,您会说类似 total += questionArray[i].checkAnswer() 的内容checkAnswer() 行。这样,您可以在每个问题之后显示和更新总数,并且您只需遍历 questionArray 一次
      【解决方案3】:

      最简单和最简单的方法是使用实​​例或静态变量来跟踪它。

      【讨论】:

        【解决方案4】:

        您想使用变量score 来汇总目前获得的积分吗?然后你必须使它成为类的属性或将其声明为静态,应该用 0 初始化它,事实上,必须添加每次获得的分数,正如 Bohemian 已经告诉你的那样。

        int score = pointValue;
        

        还有

        int score += pointValue; 
        

        对于你的 updateScore 方法是本地的,当方法离开时它的值将会丢失。如果你声明

        static int score = 0;
        

        Rgds,

        托马斯

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-06-25
          • 2019-10-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多