【问题标题】:While counter not functioning虽然计数器不起作用
【发布时间】:2015-10-14 16:42:52
【问题描述】:

我是Java 新手,正在制作一个猜谜游戏,用户必须在其中猜一个 0 到 50 之间的随机整数。

我正在尝试在游戏中添加一个猜测计数器,在“游戏结束”之前让用户最多 7 个 猜测 但是,计数器继续运行甚至高于7 尽管我的while循环。

如果这是一个重复的问题,我提前道歉,但是我确实看了一眼,并没有为我的代码找到一个好的答案

代码如下:

package guessinggame;
import java.util.Random;
import java.util.Scanner;
public class GuessingGame {
//Author TC13551 


public static void main(String[] args) {
    int NumberGuess = 0;
    Random randomNumber = new Random();
    int randomInt = randomNumber.nextInt(51);
    System.out.println("Guess the number between 0 -50:");
    int i = 0;
    while( i < 8){
    do{

       Scanner UserGuess = new Scanner(System.in);
       NumberGuess = UserGuess.nextInt();
       if(NumberGuess < 0 || NumberGuess > 50){
           System.out.println("Invalid Input, please enter numbers between 0 and 50");
       }
       else if(NumberGuess < randomInt){
            System.out.println("Guess is too small.");
            i ++;
            System.out. println("You have made "+i +" guesses out of 7");
        } 

        else if(NumberGuess > randomInt) {
           System.out.println("Guess is too big.");
            i ++;
             System.out. println("You have made "+i +" guesses out of 7");

        }
            else if(NumberGuess == randomInt){
            System.out.println("Correct! You win!");
            System.out.println("It took you "+ i + " guesses.");
            System.exit(0);
        } 


    }while(randomInt != NumberGuess);


}System.out.println("Game over!");
System.out.println("All 7 Guesses used!");
System.exit(0);

    }}

【问题讨论】:

  • 至少提供您面临的问题...
  • 另外,如果你得到随机数0,你将永远无法创建输入,因为randomInt== 0NumberGuess == 0

标签: java loops while-loop


【解决方案1】:

如果您希望在 7 次猜测后终止,则应该有一个循环:

do {
    ....
} while(randomInt != NumberGuess) && (i < 8);

当您仅在外循环中测试i 时,您会给用户无限次猜测,因为只有在用户猜对了数字后您才会离开内循环。只有在你离开内部循环之后,你才能测试猜测的数量。

【讨论】:

    【解决方案2】:

    您也可以检查存在条件,如果没有猜到并且i 值超出给定机会(例如:在您的情况下为 7):

     }while(i < 8);
    

    注意:删除了不必要的条件,请参阅@Rehman 评论。
    如果用户猜对了数字,您可以删除 randomInt != NumberGuess,就像您拥有 System.exit(0) 一样。

    【讨论】:

    • 我们为什么需要randomInt != NumberGuess?在System.exit(0); 之前有一个带有NumberGuess == randomInt 条件的检查。
    【解决方案3】:

    我认为它可能会解决您的问题,

    import java.util.Random;
    import java.util.Scanner;
    public class GuessingGame {
        //Author TC13551 
    
    
        public static void main(String[] args) {
            int NumberGuess = 0;
            Random randomNumber = new Random();
            int randomInt = randomNumber.nextInt(51);
            System.out.println("Guess the number between 0 -50:");
            int i = 0;
                do{
    
                    Scanner UserGuess = new Scanner(System.in);
                    NumberGuess = UserGuess.nextInt();
                    if(NumberGuess < 0 || NumberGuess > 50){
                        System.out.println("Invalid Input, please enter numbers between 0 and 50");
                    }
                    else if(NumberGuess < randomInt){
                        System.out.println("Guess is too small.");
                        i ++;
                        System.out. println("You have made "+i +" guesses out of 7");
                    } 
    
                    else if(NumberGuess > randomInt) {
                        System.out.println("Guess is too big.");
                        i ++;
                        System.out. println("You have made "+i +" guesses out of 7");
    
                    }
                    else if(NumberGuess == randomInt){
                        System.out.println("Correct! You win!");
                        System.out.println("It took you "+ i + " guesses.");
                        System.exit(0);
                    } 
    
    
                }while(i < 8);
    
                System.out.println("Game over!");
            System.out.println("All 7 Guesses used!");
            System.exit(0);
    
        }}
    

    【讨论】:

    • 我认为你应该添加一些关于你的修改的解释;)
    【解决方案4】:
    public class GuessingGame {
        public static void main(String[] args) {
            int NumberGuess = 0;
            Random randomNumber = new Random();
            int randomInt = randomNumber.nextInt(51);
            System.out.println("Guess the number between 0 -50:");
            int i = 1;
            Scanner UserGuess = new Scanner(System.in);
    
            while (i <= 7) {
    
                NumberGuess = UserGuess.nextInt();
                if (NumberGuess == randomInt) {
                    System.out.println("Correct! You win!");
                    System.out.println("It took you " + i + " guesses.");
                    System.exit(0);
                } else if (NumberGuess < 0 || NumberGuess > 50) {
                    System.out.println("Invalid Input, please enter numbers between 0 and 50");
                } else if (NumberGuess < randomInt) {
                    System.out.println("Guess is too small.");
                } else if (NumberGuess > randomInt) {
                    System.out.println("Guess is too big.");
                }
                System.out.println("You have made " + i + " guesses out of 7");
                i++;
            }
    
            System.out.println("Game over!");
            System.out.println("All 7 Guesses used!");
            System.exit(0);
        }
    }
    

    你也不应该Scanner UserGuess = new Scanner(System.in); 在循环中使用这个语句。 在循环之外只应创建一份扫描仪副本。

    【讨论】:

      猜你喜欢
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多