java - 测试 HashSet 时如何仅从循环中获取一个输出

标签 java if-statement while-loop bufferedreader hashset

我正在构建一个程序,该程序应该使用 HashSet 来判断文本文件中的单词列表是否都是唯一的,或者是否存在重复项。如果存在重复项,则唯一的输出应为“NOT_UNIQUE”,如果没有重复项,则输出应为“UNIQUE”。

我认为执行此操作的方法是将文件中的单词添加到 HashSet,如果无法添加某个单词,那是因为该单词是重复的。我已经开始构建该程序,但该程序为每个单词输出“UNIQUE”,而不是在程序结束时仅输出一次。我认为这与我使用 while 循环和 infile.readLine() 有关,但我不确定这里还能做什么。感谢您的帮助。我的代码如下:

import java.io.*;
import java.util.*;

public class Lab5
{
    public static void main (String[] args) throws Exception
    {
        HashSet<String> set = new HashSet<String>();
        BufferedReader infile = new BufferedReader( new FileReader( args[0] ) );
        while ( infile.ready() ) 
        {
            String word = infile.readLine();
            if ( !set.add(word) )
                System.out.println("NOT_UNIQUE \n");
            else
                System.out.println("UNIQUE \n");
        }
    } 
}

最佳答案

标志并不优雅,但在这种情况下我认为这是一个务实的解决方案。如果您不希望每个单词都显示它,您可以在循环之外设置一个标志和保释:

import java.io.*;
import java.util.*;

public class Lab5
{
    public static void main (String[] args) throws Exception
    {
        boolean isUnique = true;
        HashSet<String> set = new HashSet<String>();
        BufferedReader infile = new BufferedReader( new FileReader( args[0] ) );
        while ( infile.ready() ) 
        {
            String word = infile.readLine();
            if ( !set.add(word) ) {
                isUnique = false;
                break;
            }
        }

        System.out.println(isUnique ? "UNIQUE \n" : "NOT_UNIQUE \n");

    } 
}

如果将其放入应用程序中,请记住关闭文件描述符。

关于java - 测试 HashSet 时如何仅从循环中获取一个输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39878188/

相关文章:

java - Spring 业务对象建模

java - 在java中将CIDR表示法转换为IP范围

R - 跨多个列应用条件忽略 NA

C 初学者 : How to search for particular words in a file (line by line) in C

php - 在 PHP 中循环需要时间, fatal error : Maximum execution time of 120 seconds exceeded in

Java 网络阻塞方法和 while 循环

java - 如何在 Java 中找到给定类的所有子类?

java - Android ButterKnife NullPointer 在 CustomAdapter 中绑定(bind)

javascript - 数据表内的条件

与 scanf() 或 if() 混淆