循环这个猜谜游戏

时间:2015-11-10 19:19:11

标签: java loops if-statement for-loop while-loop

我对java很新,我想知道如何在用户猜错之后重置此游戏以询问另一个号码?

到目前为止,这是我的代码:

import java.util.Scanner;
public class Question2 {

   public static void main(String args[]) {
      Scanner keyboard = new Scanner(System.in);
         int count = 0;
         int a = 1 + (int) (Math.random() * 99);
         int guess = 0;

      System.out.println("Welcome to the Number Guessing Game");
      System.out.print("Guess a number between 0 and 100 or enter -1 to end: ");

    while (guess != a) {
    guess = keyboard.nextInt();
     count++;
    if (guess < 0 || guess > 100){
     if(guess == -1){
        System.out.print("Thank you for playing the game!");
             break;
      }
        System.out.print("Out of bounds. Try Again: ");
        continue;
    }
    if (guess > a) {
        System.out.print("The number is lower. Try again: ");
    }
    else if (guess < a) {
        System.out.print("The number is higher. Try again: ");
    }
    else if (guess == a) {
    System.out.println("Congratulations. You guessed the number in "
    + count + " tries!");
    }  
   }

}
}

3 个答案:

答案 0 :(得分:0)

你需要:

  • while条件下移动结束游戏条件,如while(guess != -1)
  • 在循环中移动欢迎问候语
  • 在游戏循环完成后移动谢谢问候语
  • 当用户赢得游戏以启动新鲜时,
  • 重置counta
  • 每次迭代重置guess

现在即使玩家猜到了数字,循环也不会结束,游戏循环只能有意停止(通过输入-1 =当前休息条件) :

import java.util.Scanner;
public class Question2 {
    public static void main(String args[]) {
        Scanner keyboard = new Scanner(System.in);
        int count = 0;
        int a = 1 + (int) (Math.random() * 99);
        int guess = 0;

        System.out.println("Welcome to the Number Guessing Game");
        while (guess != -1) {
            System.out.print("Guess a number between 0 and 100 or enter -1 to end: ");
            guess = keyboard.nextInt();
            count++;
            if (guess < 0 || guess > 100){
                System.out.print("Out of bounds. Try Again: ");
                continue;
            }
            if (guess > a) {
                System.out.print("The number is lower. Try again: ");
            }
            else if (guess < a) {
                System.out.print("The number is higher. Try again: ");
            }
            else if (guess == a) {
                a = 1 + (int) (Math.random() * 99);
                System.out.println("Congratulations. You guessed the number in " + count + " tries!");
                count = 0;
            }
            guess = 0;
        }
        System.out.print("Thank you for playing the game!");
}

代码可以进行更多重构,例如将功能提取到函数中以使代码更具可读性。如果变量发生变化或者出现更多条件,这也会使维护变得更容易。例如,代码可以像这样重构:

import java.util.Scanner;
public class Question2 {
    public static void main(String args[]) {
        Scanner keyboard = new Scanner(System.in);
        int a = 0;
        int count = 0;
        int guess = 0;

        startNewGame();

        System.out.println("Welcome to the Number Guessing Game");

        while (guess != -1) {
            System.out.print("Guess a number between 0 and 100 or enter -1 to end: ");
            guess = keyboard.nextInt();
            count++;
            if (guess < 0 || guess > 100){
                System.out.print("Out of bounds. Try Again: ");
                continue;
            }
            if (guess > a) {
                System.out.print("The number is lower. Try again: ");
            }
            else if (guess < a) {
                System.out.print("The number is higher. Try again: ");
            }
            else if (guess == a) {
                System.out.println("Congratulations. You guessed the number in " + count + " tries!");
                startNewGame();
            }
            resetGuess();
        }
        System.out.print("Thank you for playing the game!");
    }

    private static int generateNewA() {
        return 1 + (int) (Math.random() * 99);
    }

    private static void startNewGame() {
        a = generateNewA();
        count = 0;
    }

    private static void resetGuess() {
        guess = 0;
    }
}

另一种解决方案是使用两个嵌套循环,但是这种情况下的IMO 循环中的循环太多,并且使源不必要复杂。

答案 1 :(得分:0)

将代码包裹在while (true)中,这样可以永远运行您的代码。确保您在每场比赛和a之后也随机更新随机count。然后从那里检查猜测是否为-1return。当您致电return时,它将结束结束游戏的方法。

Scanner keyboard = new Scanner(System.in);
while (true){
    int count = 0;
    int a = 1 + (int) (Math.random() * 99);
    int guess = 0;
    System.out.println("Welcome to the Number Guessing Game");
    System.out.print("Guess a number between 0 and 100 or enter -1 to end: ");

    while (guess != a) {
        guess = keyboard.nextInt();
        count++;
        if (guess==-1){
            System.out.print("Thank you for playing the game!");
            return;
        }else if (guess < 0 || guess > 100){
            System.out.print("Out of bounds. Try Again: ");
            continue;
        }
        if (guess > a) {
            System.out.print("The number is lower. Try again: ");
        }
        else if (guess < a) {
            System.out.print("The number is higher. Try again: ");
        }
        else if (guess == a) {
            System.out.println("Congratulations. You guessed the number in "
                    + count + " tries!");
        }  
    }

}

答案 2 :(得分:0)

只需将整个代码(扫描仪初始化除外)包装在始终为真的while循环中。这样,当一个游戏结束时,它将开始一个新游戏。然后,当用户输入break时,而不是while游戏的-1循环,只需使用System.exit(0),这将使用状态代码结束您的程序0,表示程序执行成功。

public static void main(String[] args) throws IOException {
    Scanner keyboard = new Scanner(System.in);
    while (true) {
        int count = 0;
        int a = 1 + (int) (Math.random() * 99);
        int guess = 0;

        System.out.println("Welcome to the Number Guessing Game");
        System.out.print("Guess a number between 0 and 100 or enter -1 to end: ");

        while (guess != a) {
            guess = keyboard.nextInt();
            count++;
            if (guess < 0 || guess > 100) {
                if (guess == -1) {
                    System.out.print("Thank you for playing the game!");
                    System.exit(0);
                }
                System.out.print("Out of bounds. Try Again: ");
                continue;
            }
            if (guess > a) {
                System.out.print("The number is lower. Try again: ");
            } else if (guess < a) {
                System.out.print("The number is higher. Try again: ");
            } else if (guess == a) {
                System.out.println("Congratulations. You guessed the number in "
                        + count + " tries!");
            }
        }
    }
}