java - Java 书中扫描器的错误示例?

标签 java

我正在从 Cay S. Horstmann 和 Gary Cornell 的 Java 书中练习 HashSet,我认为第 687 页的示例代码中存在错误。我们有一个 Scanner 将单词导入 HashSet 它看起来像这样(我删除了一些不需要的代码以使问题更明显):

Set<String> words = new HashSet<String>();
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
    String word = in.next();
    words.add(word);
}

问题是没有办法停止这个循环。或者也许我缺少什么?

为了停止循环,我添加了另一个静态辅助方法:

public static boolean isStop(Scanner in) {
    if (in.next().equals("stop")) {
        return true;
    }
    return false;
}

现在主要代码如下所示:

Set<String> words = new HashSet<String>();
Scanner in = new Scanner(System.in);
while (!isStop(in)) {
    String word = in.next();
    words.add(word);
}

还有其他方法可以停止扫描器循环吗?我不敢相信那本书的作者犯了错误?

最佳答案

一旦此条件为假,循环就会停止:

in.hasNext()

也就是说,没有更多的词了。

循环内部是读取下一个单词的命令:

in.next()

因此将继续读取单词,直到 Scanner 没有更多单词可读为止。此循环将在扫描器正在读取的任何内容结束时终止。

关于java - Java 书中扫描器的错误示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26488816/

相关文章:

java - Libgdx : Sprite want stop moving;

java - 作业 API 的 Jenkins 扩展点

java - java中的Akka Websocket服务器推送

java - Jersey JaxB 类型对象的反编码问题

java - (libgdx) 为什么我的 Sprite 渲染得这么大?

java - 如果我对 Thread.interrupt() 的调用不起作用,如何正确停止线程?

java - Maven编译: package does not exist

java - 如何将表中的数据发送到jsp

java - 从 HandlerInterceptor 抛出 HTTP 状态代码异常

java - 超出微调器中最大整数的警报消息