导致方法执行两次的Java if语句
我正在尝试制作一个测验类型的游戏,由于某种原因,当我在下面添加if语句时,它会执行ask方法两次。在返回该问题是否正确之前,您将被询问两次导致方法执行两次的Java if语句,java,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;
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),但仍然没有任何结果。好吧,您正在调用customquick.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!");
}
我会把
customquick.ask()的结果放入;在一个有意义名称的变量中(如answerIsCorrect
,然后在if
语句中检查该变量,但是是的。@RobertHarvey最初(当我键入答案时)我想先将其放入一个变量中(并在条件中使用该变量),但由于OP不止一次使用结果,我决定不使用它。谢谢Eran,我想我对条件的理解有点偏差,我以为它只是检查了ask()是否返回了真/假。@joe:它确实检查了ask()
是否返回了真/假-但它通过调用ask()来检查
然后检查结果。这不像if(customGame.ask())调用ask方法
,是的……这正是它所做的。您可以删除对它的原始调用,或者将其值存储在变量中,然后在if语句中测试变量。啊,对不起,我想我误解了条件。我想它只是检查它是真是假。它正在调用它,并检查结果是真是假