扫描程序 hasNextLine() 的计算结果不会为 false

Scanner hasNextLine() won't evaluate to false

提问人:JVamcas 提问时间:10/14/2015 更新时间:10/14/2015 访问量:358

问:

  try {
        Scanner s = new Scanner(new BufferedInputStream(System.in));
        while (s.hasNextLine()) {
            first = true;
                int val1 = add(alpha, s.nextLine().toLowerCase().split(""));
                int val2 = add(alpha, s.nextLine().toLowerCase().split(""));
                first = false;
                while (val1 > 9 || val2 > 9) {
                    val1 = add(alpha, Integer.toString(val1).split(""));
                    val2 = add(alpha, Integer.toString(val2).split(""));
                }
                if (val1 > val2) {
                    System.out.println(format.format((val2 / (double) val1) * 100) + " %");
                } else {
                    System.out.println(format.format((val1 / (double) val2) * 100) + " %");
                }
        }
    } catch (NoSuchElementException e) {
        System.exit(0);
    }
}

static int add(String[] alpha, String[] letter) {
    int val = 0;
    for (String string : letter) {
        if (Character.isLetter(string.charAt(0))) {
            val += Arrays.asList(alpha).indexOf(string) + 1;
        } else if (!first && Character.isDigit(string.charAt(0)))
            val += Integer.parseInt(string);
    }
    return val;
}

我已经阅读了几乎所有关于 Scanner hasNext() 无法正常工作的问题,但我无法得到修复。这个问题的任何解决方案。输入是一个多行字符串,没有字符的哨兵。

输入 java.util.scanner

评论

1赞 Barbe Rouge 10/14/2015
这是你的答案吗?stackoverflow.com/a/5653349/1503780
0赞 JVamcas 10/14/2015
谢谢。但是,你有什么解决方案吗?奇怪的部分是,如果我调试,我注意到在输入结束时,s.hasNext() 导致 while 循环停止,但程序本身并没有停止。我不知道这怎么可能。
0赞 Cinnam 10/14/2015
如上面链接的答案所述,扫描仪在读取键盘输入时总是会说它有一行,除非您通过 Ctrl+Z / Ctrl+D 发出输入结束的信号。因此,您可以这样做,或者在输入中测试一些选择的关键字,然后结束循环。

答: 暂无答案