-5

これは明白な答えかもしれませんが、明日が期限であり、私は完全に困惑しています. 最後のifステートメントを除いて、すべてが正常に機能しています。continueGame ループが if ステートメントを無限にループしているようです。誰かがこの問題で私を助けることができれば、お願いします。

import java.util.Random;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class HighLOw {
    public static void main(String[] args) throws IOException {

        String input = null;
        int number = 0;
        int tries = 0;
        boolean highorlow = false;
        boolean continueGame = false;
        boolean validInput = false;
        Random random = new Random();
        int randomNumber = (random.nextInt(101));

        System.out.println("Welcome to the High/Low game.");
        System.out.println("Guess a number between 0 and 100.");
        System.out.println(
                "In order to print a random number, type your number in the console and press enter.");
        System.out.println("Keep going until you get the right number.");
        System.out.println("Have fun.");
        System.out.println(randomNumber);

        while (continueGame == false) { 

            while (validInput == false) {
                try {
                    BufferedReader bufferedReader = new BufferedReader(
                            new InputStreamReader(System.in)); // BufferedReader variable where the user will input their answer

                    input = bufferedReader.readLine();
                    number = Integer.parseInt(input);
                    validInput = true;

                } catch (NumberFormatException ex) { 
                    System.out.println("Invalid input, please enter a number.");
                    validInput = false;
                }

                if (number < 0 || number > 100) {
                    System.out.println(
                            "Error, you must enter a number that is between 0 and 100");
                    validInput = false;
                }
            }

            if (number < randomNumber) {
                System.out.println(
                        number + " is too low. Please try a higher number");
                tries++;
                highorlow = false;
            } else if (number > randomNumber) {
                System.out.println(
                        number + " is too high. Please try a lower number");
                tries++;
                highorlow = false;
            } else if (number == randomNumber) {
                System.out.println(
                        "Congratulations, you guessed the right number. Now go outside.");
                tries++;
                System.out.println("It took you " + tries + (" tries."));
                System.out.println("Game Ended");
                continueGame = true;
            }
        }
    }
}
4

2 に答える 2

4

いくつかのヒント: 初めて有効な数字を入力すると、validInputは になりtrueます。number次に、コードは比較に進み、ループrandomNumberの先頭に再びジャンプします。nowcontinueGameの価値は何ですか? これはループにどのような影響を与えるでしょうか? 新しい価値を手に入れる日は来るのだろうか?validInputvalidInputnumber

また、する必要はありませんwhile (validInput == false)..ちょうどwhile (!validInput)同等です..

于 2012-10-03T20:23:26.977 に答える
0

if/elseステートメントは上から下に評価されることに注意してください。一致するifものが見つかると、その本体が実行されて終了します。

これを念頭に置くと、構造体の特定の評価には、本体が実行される場所がif/else1 つしかないことを意味します。case

あなたのif句を見て、それらを数直線のように考えてください(または、何ができるかのいくつかの例で数直線を描くnumberことrandomNumberをお勧めします)、答えが飛び出すかどうかを確認してください.

于 2012-10-03T20:46:56.007 に答える