我环顾四周,似乎找不到问题究竟是什么的答案。它执行很好,直到循环,然后它似乎忽略循环并挂起,所以我很困惑。
package classGame;
import java.util.*;
public class GameTwo {
static int randomNumber;
static int numOfGuess = 5;
static Scanner GameTwo = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("Frank: Hello there! My name is Frank. This is the introduction to the game.");
System.out.print("Frank: Please tell me what you would like to be called: ");
if(GameTwo.hasNextLine()) {
String userName =GameTwo.nextLine();
System.out.println(userName + ": My name is: " + userName);
System.out.println("Frank: Well " + userName + ", it's nice to meet you. ");
System.out.println("Frank: Lets play a little game, I want you to guess a number, It's already" +
" in my head and it's between 1-10.");
int guessResult = 1;
int randomGuess = 0;
while(guessResult != -1) {
randomGuess = GameTwo.nextInt();
guessResult = checkGuess(randomGuess);
}
while (randomGuess != guessResult) {
System.out.println(userName + ":Is the number: ");
randomGuess = GameTwo.nextInt();
if(randomGuess < 1 || randomGuess > 10 || randomGuess > guessResult || randomGuess < guessResult) {
System.out.println("Frank: Thats not right "+ userName);
} else if (randomGuess == guessResult) {
System.out.println("Frank: Hey...Thats pretty good...You got it!");
}
}
}
}
public static int getRandomNum () {
randomNumber = (int) (Math.random()*10);
return randomNumber;
}
public static int checkGuess(int guess) {
if(guess == randomNumber) {
return -1;
} else {
return guess;
}
}
}
这是它打印到循环的内容
弗兰克:你好!我叫弗兰克。这是游戏的介绍。 弗兰克:请告诉我你想叫什么:T T:我的名字是:T 弗兰克:恩,很高兴见到你。 弗兰克:让我们玩一个小游戏,我想让你猜一个数字,它已经在我的脑海里了,它在1-10之间。答案 0 :(得分:0)
我认为这是Scanner.nextInt()工作原理的一个问题。 nextInt()接受下一个找到的Integer,但它不像nextLine()那样清除缓冲区。
有关此问题的详情,请参阅此链接:How does input.nextInt() work exactly?
试试这个,看看你的循环是否正常继续:
while(guessResult != -1) {
randomGuess = GameTwo.nextInt();
guessResult = checkGuess(randomGuess);
GameTwo.nextLine();
System.out.println("Random Guess: " + randomGuess); //Try here
}
我认为循环被挂起的原因是因为nextInt()一直在输入缓冲区中找到randomGuess编号并一遍又一遍地执行。要对此进行测试,只需将System.out.println("Random Guess: " + randomGuess);
放入循环中,然后一遍又一遍地查看是否使用相同的数字进行打印。
否则,我需要查看程序的输出以进一步诊断问题。
编辑:您可以将程序的输入/输出发布到崩溃的位置吗?这会有所帮助。另外,你的循环中的System.out.println()是否以while(guessResult!= -1)或第二个开头?
编辑2:我使用我的编辑测试了此代码,它似乎按预期工作(ish)。初始while循环不执行预期的操作。猜测正确数字的“游戏”方面都发生在第一个循环中。我正在“玩”游戏并猜测数字,但是一旦我弄清楚它,它会移动到第二个循环,大概就是你真正想要“玩”的地方。在第一个循环中获取正确的数字,然后将guessResult变量设置为-1。然后,当用户试图猜测他们应该在哪里时,“正确”的数字现在为-1。
我不认为游戏曾经“挂断”,它只是在第一个循环中静静地等待你的输入。要解决这个问题:
只需删除第一个while循环(及其内容),游戏就可以正常运行。