1
import java.io.*;
import java.util.Scanner;

public class Solve {
    public static void main(String[] args) {
        int max = 10;
        int i = 0;
        long record = 100000;
        while (i != 100) {
            int x = (int) (Math.random() * max) + 1;
            int y = (int) (Math.random() * max) + 1;
            int solution = x + y;
            long startTime = System.currentTimeMillis();

            while (i != solution) {
                System.out.println("Enter the solution to " + x + "+" + y);
                Scanner sc = new Scanner(System.in);
                i = sc.nextInt();
                if (i != solution) {
                    System.out.println("Incorrect");

                } else {
                    System.out.println("Correct!");
                }
                long endTime = System.currentTimeMillis();
                System.out.println("You took: " + (endTime - startTime) + "ms");

                if (endTime - startTime < record) {
                    record = endTime - startTime;
                    System.out.println("New record time: " + record + "ms");
                }
            }
        }
    }
}

このプログラムは簡単な足し算の問題を作成し、ユーザーに答えを入力するように求めます。また、質問に正しく答えるまでにかかった時間も追跡します。ユーザーが 100 for i を入力して最初の while ループを終了できるようにしましたが、このループを終了するより良い方法はありますか?

4

2 に答える 2

2

内側のループから抜け出すことはありません。while実行パスはそこにスタックします。簡単な修正は、内側のループのループ制約を調整することです。

while (i != solution && i != 100)
于 2013-06-26T01:01:49.937 に答える
1

100 が解でもない限り、内側のループから抜け出すことはありません。そのための最も簡単な修正は、次のように、ユーザーが 100 を入力したときにそのループから抜け出すことです。

i = sc.nextInt();
if (i == 100) break; // add this line
if (i!=solution) ...

そうすれば、正しい答えを継続的にチェックする内側のループを終了し、外側のループも終了します。

ユーザーが終了したことを示すより良い方法があるかもしれませんが数値の合計が 100 になることは決してないため、このケースではこれ十分です。の歩哨として (結果が負になる可能性があるポイントに到達した場合は、それも調整する必要があります)。-1

また、ユーザーがプログラムの終了方法を推測しないように、100 がセンチネル値であることをユーザーに明確にすることもできます。

System.out.println ("Enter the solution to " + x + "+" + y + " or 100 to exit");
于 2013-06-26T00:54:51.000 に答える