0

我需要在我不久前制作的猜谜游戏中添加一个方法。该方法应该返回他们输入的值,但应该使用循环来要求重新输入,直到指定了这两个值之一。此外,如果用户输入一个单词而不是 int,它应该要求输入一个数字。我知道我需要使用字符串而不是 int。我只是很难弄清楚这一点。这是我到目前为止所拥有的:

import java.util.Random;

import java.util.Scanner;

class GuessNumber {

    static Random rand = new Random(); 
    static Scanner scan = new Scanner(System.in); 
    static int number; 

    public static void main(String[] args) {
        playGame();
    }

    public static void playGame() {
        number = rand.nextInt(100) + 1;
        System.out.println("Guess the number between 1 and 100");
        while (true) {
            int guess = scan.nextInt();
            if (guess < number) {
                System.out.println("Higher!");
            } else if (guess > number) {
                System.out.println("Lower!");
            } else if (guess == number) {
                System.out.println("Correct!");
                Scanner scan2 = new Scanner(System.in);
                System.out.println("do you wanna play again?[Y/N]");
                String val = scan2.next();
                if (val.equalsIgnoreCase("Y")) {
                    playGame();
                } else {
                    break;
                }
            }
        }
    }
}
4

2 回答 2

2

可能有更好的方法可以做到这一点,但请尝试以下方式:

String input = scan.next();
int guess;
try{
    guess = Integer.parseInt(input);
    //rest of the code inside while(true) loop
}
catch(Exception e){
    System.out.println("You need to enter a valid number.");
}

然后进行 Y/N 验证:

String val = "No";
Scanner scan2 = new Scanner(System.in);
do{
    System.out.println("do you wanna play again?[Y/N]");
    val = scan2.next();
}
while(!val.equalsIgnoreCase("Y") && !val.equalsIgnoreCase("N"))
if (val.equalsIgnoreCase("Y")) {
   playGame();
   break;
} else {
   break;
}

推理:如果他们没有输入有效数字,您将收到错误,因此您需要捕获错误并让他们知道出了什么问题。我喜欢将输入作为字符串并尝试将其转换为整数。至于 do/while 部分......除非他们输入 Y 或 N,否则它将继续询问他们。一旦退出循环,如果输入为“Y”,它将再次调用 playGame(),然后在完成后中断(基本上每当用户在下一个游戏中键入 n 时)。如果不是“Y”,那么它必须是“N”并且需要中断。

让我知道这是否有帮助。我有完整的代码可以工作,但这应该很容易让你实现。

于 2014-10-08T01:34:46.580 回答
1

当您声明静态变量时,请输入:

static int number, guess;

同时申报两个号码。然后,在主循环中,执行以下操作:

while (true) {
    while (true) {
        try {
            guess = Integer.parseInt(scan.nextLine());
            break;
        } catch (Exception e) {
            System.out.println("Not a valid number!");
            continue;
        }
    }
    //Rest of your if's, else if's, etc
}

我已经测试过了,它对我有用。

如果您需要我,我可以粘贴所有代码,但是您应该能够轻松地将第二个 while 循环嵌套在第一个 if 语句之前。

于 2014-10-08T01:39:58.657 回答