在java中使用while loop和hasnext()时出现意外输出

jv2fixgn  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(292)
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也是一样的。但我按回车键而不是d,预期的输出是:“4”,但它没有输出4,相反,没有输出是给定的,当我输入e后,按回车键4“空格”和5 e都打印出来。有人能指出我在这里错过了什么吗?

1tu0hz3e

1tu0hz3e1#

扫描器的nextline()经过当前行并返回跳过的输入,这就是为什么每次在没有输入的情况下输入down时它都会计数,如果要避免跳过,可以尝试 scan.next()

huus2vyu

huus2vyu2#

这是因为您正在使用 nextLine 方法。按enter键而不输入字符时, hasNext() 等待下一个字符。当您输入e然后按回车键时, hasNext() 返回。但您现在输入了两行文本:一行为空,另一行为“e”。呼叫 nextLine 返回空行,在循环的下一次运行时,它返回带有“e”的行。
为了防止这种情况发生,不要混合使用hasnext和nextline,使用hasnext/next或hasnextline/nextline。不同的是,第一个计算“单词”之间的空格,第二个计数行。

while(scan.hasNextLine()){
        System.out.println(i + " " + scan.nextLine());
        i++;
    }

相关问题