0

これは、推測ゲームの完全なコードの一部です。

public static void Game(){              //Second page of game with option of continue playing when guessed close enough to answer.
    Scanner scan = new Scanner(System.in);

    GuessingGame testgame=new GuessingGame();

    testgame.Generator();
    int num = testgame.GetGenNum();
    //Produces a random number between 1 and 100 inclusive of 1 and 100


    System.out.println("Guess the target integer which is between 1 and 100 inclusive");

    int guess=scan.nextInt();

    int difference=(guess-num);



    while(guess!=num){
        int yesCounter=0;

        System.out.println("Guess again " +num+" "+difference);
        guess=scan.nextInt();
        difference=(guess-num);


        ///something wrong here, shouldnt repeat if difference too big 
        if(difference<=5||difference>=-5){  //something wrong with the condition, it says its close enough even tho it isnt.    
        while(yesCounter<1){
            System.out.println("Close enough, do you want to keep Guessing? Y/N ");
            yesCounter++;


            String play = scan.nextLine();
            //play=play1;
            while(!(play.equalsIgnoreCase("y")))
            {


                if(play.equalsIgnoreCase("n")){
                    System.exit(1);
                }

                else{
                    if((play.equalsIgnoreCase("y"))){
                        invalid();
                        guess=scan.nextInt();
                    }
                    else{
                        Game();             ///TAKE note as it might restart the game with new random integer
                    }
                }

            }
        }

    }   

    }

出力は次のとおりです。

...................................

遊ぶ?はい/いいえ

y

1 から 100 までの範囲のターゲット整数を推測します

50

もう一度当ててください 44 6

44

十分に近く、推測を続けますか? はい/いいえ

1 から 100 までの範囲のターゲット整数を推測します

...................................

問題は、ユーザーが数字を推測するとき、条件は、推測と生成された数字の差が5以下の場合であり、ユーザーに十分に近いことを伝え、ユーザーが推測を続けたいかどうかを尋ねますが、条件はそうではありませんでした満たされているがまだ実行されている場合、誰か助けてもらえますか?

4

3 に答える 3

0
while(!(play.equalsIgnoreCase("y")))
        {


            if(play.equalsIgnoreCase("n")){
                System.exit(1);
            }

            else{
                if((play.equalsIgnoreCase("y"))){
                    invalid();
                    guess=scan.nextInt();
 ....

そうではありませんif((play.equalsIgnoreCase("y")))。真になることは決してありません。ループが含まれているため、真の場合は明示的に入ることができません。そこが問題です。else-branch で Game() を呼び出すため、常にゲームが再起動されます。要するに、これはあなたがすることです:

boolean _true = true;

while(! _true) {

    if(_true) {
        //impossible
    }
    else {
        Game(); //ALWAYS
    }
}

質問に宿題のタグを付けたので、完全な修正はしませんが、どこが間違っているかがわかったので、先に進むために何を変更する必要があるかを理解できるはずです:)

于 2012-04-23T17:18:50.833 に答える
-1

orand を混在させました(注: 使用した条件(difference<=5||difference>=-5)は常にtrue.)。次のいずれかを使用できます

if (difference<=5 && difference>=-5) { ... }    # difference is 5 or less

また

if (difference<=-5 || difference>=5) { ... }    # difference is 5 or more

Math.abs(...)代わりに次を使用すると読みやすくなります。

if (Math.abs(difference)<=5) { ... }    # difference is 5 or less

if (Math.abs(difference)>=5) { ... }    # difference is 5 or more

それぞれ

于 2012-04-23T17:14:37.707 に答える
-1

if(difference<=5||difference>=-5)これは、差が 5 未満か -5 より大きいかを示します。すべての数値は 5 未満または -5 より大きいため、これは常にtrue です。

あなたが望むものはのようなものだと思いますif(Math.abs(difference)<=5)。これにより、差分変数の絶対値が 5 以下かどうかがわかります。

于 2012-04-23T17:15:12.747 に答える