Java, если оператор, вызывающий метод, выполнить дважды

-4

Я пытаюсь сделать игру типа викторины, и по какой-то причине, когда я добавляю оператор 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();
}
}

другой класс, который задает вопросы:

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;
}
}

Я изолировал проблему, и она определенно выглядит как оператор if: if(customGame.ask()) {} в классе драйвера, но я не понимаю, почему. Это не так, if(customGame.ask()) снова вызывает метод ask, он просто проверяет, возвращает ли он true? Я также пробовал, только if(customGame.ask() == true) и все еще ничего.

спросил(а) 2021-01-25T12:28:55+03:00 4 месяца, 3 недели назад
1
Решение
117

Ну, вы вызываете customQuiz.ask() дважды:

customQuiz.ask();

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

Просто назовите его только один раз:

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

Или (как было предложено @RobertHarvey), вы можете поместить результат метода в переменную и использовать его позже:

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

ответил(а) 2021-01-25T12:28:55+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема