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

时间:2014-10-21 14:10:37

标签: 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); } 1}}它看起来像这样(我删除了一些不需要的代码以使问题更加明显):

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);
}

现在主代码看起来像这样:

{{1}}

还有其他方法可以阻止扫描仪循环吗?我无法相信这本书的作者犯了错误?

5 个答案:

答案 0 :(得分:3)

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

in.hasNext()

即,没有更多的话。

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

in.next()

因此,在扫描仪无法阅读之前,将继续读取字词。该循环将在扫描仪正在读取的任何内容结束时终止。

答案 1 :(得分:1)

由于您正在扫描System.in,因此循环不会停止,因为它会继续添加&#34;单词&#34;到Set,但程序中没有明显的错误。

一旦用户输入与该关键字匹配,您选择关键字来停止循环的想法听起来不错。

您并不需要使用Scanner作为参数的静态方法。

只需在String word = in.next();之后添加以下内容:

if (word.equalsIgnoreCase("stop")) {
    System.out.printf("Quitting with set: %s%n", words);
    in.close();
    return; // assuming method is void
}

答案 2 :(得分:1)

正如其他人所解释的那样,当输入中仍有单词时,扫描仪将继续运行。请注意,当我们谈论System.in时,它通常会等到用户输入更多文本,因此在用户关闭流之前不会终止(为操作系统提供适当的文件结尾) )。在Unix / Linux中,要终止循环,用户需要使用control-D。

答案 3 :(得分:1)

循环不会停止,因为它会继续向Set添加“单词”,但程序中没有明显的错误。

一旦用户输入与该关键字匹配,您选择关键字来停止循环的想法听起来不错。

您不需要使用Scanner作为参数的静态方法。

只需添加更改代码,如下所示:

Set<String> words = new HashSet<String>();
Scanner in = new Scanner(System.in);
System.out.print("Type a word...");
while (in.hasNext()) {
    String word = in.next();
    if (word.equalsIgnoreCase("stop")) {
        System.out.printf("Quitting with set: %s%n", words);
        return; // assuming method is void
    }
    else {
        words.add(word);
        System.out.print("Type a word (or \"stop\" to quit)...");
    }
}

答案 4 :(得分:1)

IF 在循环之后有代码要执行,是的,我会说作者犯了一个错误。写信告诉他们!如果这是将项目添加到Set的示例,那么示例就可以了。这一切都取决于作者的意图示例是什么。

hasNext()是一种阻止方法,意味着它总是会等待更多输入。关于此问题,有related questions。你的“解决这个问题”的方式是普遍的共识。