hasNext() - 它何时阻塞以及为什么?

2024-04-10

我正在尝试通过读取命令Scanner目的。为了检查我使用的输入语法sc.hasNext()(针对缺少命令的情况)。它已经在很多情况下工作得很好,但现在我遇到了 JavaAPI 中描述的情况:“可以阻止并等待输入”。

什么时候hasNext()方法块以及如何控制它?有趣的是,它在块之前的 3 个案例中运行得非常好。 Java API 还描述了hasNext()作为检查是否有另一个输入的正确方法,以便该方法next()不产生Exception.

这是我到目前为止生成的代码:

if (sc.hasNext() && sc.next().equals("create")) {
    if (sc.hasNextInt()) {
        width = sc.nextInt();
        if (width > 0) {
            if (sc.hasNextInt()) {
                heigth = sc.nextInt();
                if (heigth > 0) {
                    if (sc.hasNext()) {  //At this point the hasNext Statement blocks for //no reason till an Input is made.
                        charset = sc.next();
                        Image = new AsciiImage(width, heigth,charset);
                    } else {
                        ret = false;
                        System.out.println("INPUT MISMATCH");
                    }
                } ...//and so on

提前致谢,我自己找不到有关此主题的任何内容。 编辑:扫描仪被定义为 System.in,但这不应该是一个问题 - 至少到目前为止还不是一个问题。


通过控制台测试和通过文本文件测试之间存在差异。如果我从控制台读取,程序需要一个流,它将等待进一步的输入。

当通过文本文件的输入进行测试时(仍然使用 System.in 作为扫描仪,使用 Java 程序),hasNext() 将在文件末尾返回 false,因为无法进行进一步的输入。

我真的找不到文档(在https://docs.oracle.com/javase/9​​/docs/api/java/util/Scanner.html#hasNext-- https://docs.oracle.com/javase/9/docs/api/java/util/Scanner.html#hasNext--)关于这个主题。因此,如果有人找到适当且技术上正确的答案,我将非常感激。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hasNext() - 它何时阻塞以及为什么? 的相关文章

随机推荐