我写了一个java程序,但它似乎是一个无限循环

qc6wkl3g  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(323)
import java.util.Scanner;

public class FirstJava {
    public static void main(String args[]) {
        final int NUMBER_OF_QUESTIONS = 5;
        int correctCount = 0;
        int count = 0;

        Scanner input = new Scanner(System.in);

        while (count < NUMBER_OF_QUESTIONS) {
            int number1 = (int) (Math.random() * 10);
            int number2 = (int) (Math.random() * 10);

            if (number1 < number2) {
                int temp = number1;
                number1 = number2;
                number2 = temp;
            }

            System.out.print("What is " + number1 + " - " + number2 + "? ");
            int answer = input.nextInt();

            while (number1 - number2 != answer) {
                System.out.println("Wrong, try again.");
                System.out.println("What is " + number1 + " - " + number2 + "? ");
            }

            System.out.println("Correct!");
            count++;
            correctCount++;

        }
        System.out.println("You got " + correctCount + " correct!");
    }
}

我认为第二个while循环有问题,但我不知道是什么。目标是问减法问题,直到用户答对为止。有人能帮我吗?

wh6knrhe

wh6knrhe1#

问题是内部循环一旦进入就不会返回,因为条件永远不会改变。您可以在条件中直接请求用户输入:

System.out.print("What is " + number1 + " - " + number2 + "? ");

while (input.nextInt() != number1 - number2) {
    System.out.println("Wrong, try again.");
    System.out.print("What is " + number1 + " - " + number2 + "? ");
}

代码其余部分的一些旁注:
而不是 (int) (Math.random() * 10) ,我建议使用 Random#nextInt() .
外部 while -循环可以被更易于阅读的 for -循环。
变量的用例 NUMBER_OF_QUESTIONS 或者将其作为静态成员移动到类中。
使用java表示法( String[] args )对于main方法的参数数组而不是c样式( String args[] ).
顺便说一句。。。 correctCount 将始终相同,如果不使用可能会被删除。
这是一节有以上建议的改编课:

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

public class SubtractionQuiz {

    private static final int NUMBER_OF_QUESTIONS = 5;

    public static void main(String[] args) {
        final Scanner input = new Scanner(System.in);
        final Random random = new Random();

        int correctCount = 0;
        for (int count = 0; count < NUMBER_OF_QUESTIONS; count++) {
            int number1 = random.nextInt(10);
            int number2 = random.nextInt(10);

            // order numbers
            if (number1 < number2) {
                int temp = number1;
                number1 = number2;
                number2 = temp;
            }

            System.out.print("What is " + number1 + " - " + number2 + "? ");
            while (input.nextInt() != number1 - number2) {
                System.out.println("Wrong, try again.");
                System.out.print("What is " + number1 + " - " + number2 + "? ");
            }
            System.out.println("Correct!");
            correctCount++;
        }

        System.out.println("You got " + correctCount + " correct!");
    }
}

相关问题