Java scan.next()在循环内不工作
我正在制作一个玩围棋的程序。除了循环一次后的Java scan.next()在循环内不工作,java,loops,java.util.scanner,Java,Loops,Java.util.scanner,我正在制作一个玩围棋的程序。除了循环一次后的scan.next()之外,所有操作都正常 嗯,有时有效,有时无效。代码如下: System.out.println(compHand.showHand()); while (!(deck.isEmpty())) { y = 0; while (x == 1) { System.out.println("\nYour hand:" + userHand.showHand()+
scan.next()
之外,所有操作都正常
嗯,有时有效,有时无效。代码如下:
System.out.println(compHand.showHand());
while (!(deck.isEmpty())) {
y = 0;
while (x == 1) {
System.out.println("\nYour hand:" + userHand.showHand()+ "\nYour turn. What number do you want to match?");
guess = scan.next();
if (compHand.checkHand(guess)) {
System.out.println("Darn...here you go.");
userHand.removeNum(guess);
compHand.removeNum(guess);
userHand.showHand();
uP++;
}
else {
System.out.println("Nope! Type '1' to go fish!");
y = scan.nextInt();
if (y == 1) {
userHand.goFish();
System.out.println(userHand.showHand());
}
y = 0;
}
guess = "";
x--;
}
while (x == 0) {
System.out.println("Do you have any " + compHand.ask() + "s?");
ans = scan.next();
if (!(ans.contains("go"))) {
System.out.println("Yay!");
userHand.removeNum(ans);
compHand.removeNum(ans);
cP++;
x++;
}
else {
System.out.println("Aww...darn.");
compHand.goFish();
x++;
}
}
System.out.println("Computer's points so far: " + cP + "\nYour points so far: " + uP + "\n");
}
}
因此,当它第一次循环到用户手上时,它就起作用了。然后轮到计算机工作,但如果计算机不得不去钓鱼。当它循环回到用户手上时,它跳过guess=scan.next()代码>。
我不知道该怎么办…问题来自缓冲区。你必须释放它。为此,将scan.nextLine()放在循环的结束括号之前,它将释放缓冲区。然后您可以输入输入。在什么情况下,扫描.next()
会失败?成功时有什么不同?仅供参考--我重新格式化了您的代码,因为您应该选择一种缩进/括号样式并坚持使用它,而不是使用两种不同的样式。您是否使用了调试器来逐步检查您的代码,并查看在何处执行的行?它确实有助于找出这些类型的问题。此外,发生此跳过时是否打印出“您的手…”文本?如果不是,那么很可能是因为x!=1
当计算循环条件时。因此方法removeNum
可以同时处理String
和int
?你怎么知道的?我不明白你的问题。为了释放缓冲区,我建议您添加的scan.nextLine()必须被添加。那么请解释一下,为什么OP应该将next()
替换为nextInt()
?而nextLine()
只是必要的,因为您建议使用nextLine()
。我现在明白了。我希望他替换它,因为他命名变量的方式和打印的文本表明他正在等待一个数字。如果他需要一个字符串,他总是可以使用String.valueOf(int i)。*她和是的,有时是一个数字,但也可以是“J”、“Q”或“K”表示人脸卡,或是“a”表示a。是的,我需要一根绳子。我有代码,然后根据需要将其更改为int,但要将其放入代码中,我需要一个字符串。这是一个非常奇怪的问题。