Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java scan.next()在循环内不工作_Java_Loops_Java.util.scanner - Fatal编程技术网

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,但要将其放入代码中,我需要一个字符串。这是一个非常奇怪的问题。