我需要为我之前制作的猜谜游戏添加一种方法。该方法应返回它们输入的值,但应使用循环来要求重新输入,直到指定了这两个值中的一个。 此外,如果用户输入一个单词而不是一个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;
}
}
}
}
}
答案 0 :(得分: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,否则会继续问他们。一旦退出循环,如果输入是&#34; Y&#34;它将再次调用playGame()然后在完成后中断(基本上每当用户在下一个游戏中键入n时)。如果它不是&#34; Y&#34;然后它必须是&#34; N&#34;并需要打破。
如果这有帮助,请告诉我。我有完整的代码可以使用,但这应该很容易实现。
答案 1 :(得分: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
}
我测试了它,它对我有用。
如果你需要我,我可以粘贴所有代码,但是你应该能够在if语句之前将第二个循环嵌套在第一个循环中,这很容易。