Java if语句导致方法执行两次

joe*_*joe -1 java

我正在尝试制作一个测验类型的游戏,出于某种原因,当我在下面添加if语句时,它会执行两次ask方法.在返回问题之前,您将被问两次问题是否正确.

import java.util.Scanner;

public class QuizGame
{
private int correct;
private int wrong;
private Scanner inputScan;
private Quiz customQuiz;

public QuizGame()
{
   correct=0;
   wrong=0;
   inputScan    =   new Scanner(System.in);
}

private void startQuiz()
{
        System.out.println("Use custom upper limit? (y/n) ");
        String custom   =   inputScan.next();

        if(custom.equalsIgnoreCase("y"))
        {
            System.out.println("What do you want to be your upper limit?");
            int limit   =   inputScan.nextInt();
            customQuiz  =   new Quiz(limit);
            customQuiz.ask();

            if(customQuiz.ask())
            {
                correct +=1;
                System.out.println("Correct!");
            }
            else 
            {
                wrong+=1;
                System.out.println("Wrong!");
            }
        } 
    }

    public static void main(String[] args)
    {
        QuizGame quiz1  =   new QuizGame();
        quiz1.startQuiz();
    }
}
Run Code Online (Sandbox Code Playgroud)

其他课程提出问题:

import java.util.Random;
import java.util.Scanner;

public class Quiz
{
    private Random rGen;
    private int num1;
    private int num2;
    private Scanner getInput;
    private int answer;

    public Quiz(int n1)
    {
        rGen    =   new Random();
        num1    =   rGen.nextInt(n1);
        num2    =   rGen.nextInt(n1);
        getInput   =   new Scanner(System.in);

    }

    public boolean ask()
    {
        int answer = num1 * num2;
        System.out.println("What is " + num1 + " x " + num2);
        int userAnswer  =   getInput.nextInt();

        return answer == userAnswer;   
    }
}
Run Code Online (Sandbox Code Playgroud)

我隔离了问题,它肯定似乎是if语句:if(customGame.ask()) {}在驱动程序类中,但我不明白为什么.这不像if(customGame.ask())再次调用ask方法,只是测试它是否返回true?我也尝试过,if(customGame.ask() == true)但仍然没有.

Era*_*ran 6

好吧,你打了customQuiz.ask()两次电话:

customQuiz.ask();

if (customQuiz.ask ())
{
    correct += 1;
    System.out.println ("Correct!");
}
Run Code Online (Sandbox Code Playgroud)

只需称呼一次:

if (customQuiz.ask ())
{
    correct +=1;
    System.out.println ("Correct!");
}
Run Code Online (Sandbox Code Playgroud)

或者(如@RobertHarvey所建议的)您可以将方法的结果放在变量中并稍后使用它:

boolean correct = customQuiz.ask ();
if (correct)
{
    correct += 1;
    System.out.println ("Correct!");
}
Run Code Online (Sandbox Code Playgroud)