簡體   English   中英

我寫了一個 java 程序,但它似乎是一個無限循環

[英]I wrote a java program but it seems to be an infinite loop

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 循環有問題,但我不知道是什么。 目標是提出減法問題,直到用戶正確為止。 有人可以幫我弄這個嗎?

問題是內部循環一旦進入就永遠不會返回,因為條件永遠不會改變。 您可以直接在條件內要求用戶輸入:

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 + "? ");
}

代碼的 rest 的一些旁注:

  • 而不是(int) (Math.random() * 10) ,我建議使用Random#nextInt()
  • 外部的while循環可以替換為更易於閱讀for循環。
  • 對變量NUMBER_OF_QUESTIONS使用camelCase或將其移動到 class 作為 static 成員。
  • 使用 Java 表示法( String[] args )作為 main 方法的參數數組,而不是 C 樣式( String args[] )。
  • 順便說一句... correctCount將始終相同,如果不使用可能會被刪除。

這是經過修改的 class 與上述建議:

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!");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM