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
                    }
                }

            }
        }

    }   

    }

输出是:

…………………………………………………………………………………………………………

玩?是/否

是的

猜测 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 分支中调用 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,所以这总是正确的。

我假设你想要的是类似if(Math.abs(difference)<=5). 这将告诉您差异变量的绝对值是否小于或等于 5。

于 2012-04-23T17:15:12.747 回答