如何解决在Java中使用,while循环和hasNext的意外输出
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int i=1;
while(scan.hasNext()){
System.out.println(i + " " + scan.nextLine());
i++;
}
}
}
输出:
a
1 a
b
2 b
c
3 c
e
4
5 e
问题:当我输入a时,输出是预期的,因为b和c也相同。 但是我按Enter键而不是d键,预期的输出结果是:“ 4”,但它不会输出4,而是没有输出,并且当我在按Enter键后输入e时,会同时打印4“ space”和5e。有人可以指出我想在这里看到的东西吗?
解决方法
发生这种情况是因为您使用的是nextLine
方法。当您不输入字符而按 Enter 时,hasNext()
等到下一个字符。当您输入e并按 Enter 时,将返回hasNext()
。但是,您现在输入了两行文本:一行为空,另一行为“ e”。对nextLine
的调用返回空行,在循环的下一次运行中,它返回带有“ e”的行。
要阻止这种情况发生,请不要使用hasNext和nextLine的混合使用,而要使用hasNext / next或hasNextLine / nextLine。区别在于,第一个计数由空格分隔的“单词”,第二个计数行。
while(scan.hasNextLine()){
System.out.println(i + " " + scan.nextLine());
i++;
}
,
扫描器的 nextLine()越过当前行并返回被跳过的输入,这就是为什么每次没有输入时向下输入都会计数的原因,如果要避免跳过,可以尝试scan.next()
>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。