2016-10-05 1 views
0

テキストファイルの単語のリストがすべて一意であるかどうか、またはHashSetを使用して重複があるかどうかを判断するプログラムを構築しています。重複がある場合、唯一の出力は "NOT_UNIQUE"でなければならず、重複がない場合、出力は "ユニーク"でなければなりません。HashSetをテストするときにループから1つの出力を取得する方法

私はこれを行う方法は、ファイルからHashSetに単語を追加することですが、単語が追加できない場合、その単語は重複しているためです。私はすでにプログラムを構築し始めていますが、プログラムの最後には一度だけではなく、すべての単語に対して「ユニーク」を出力します。私はこれが私の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"); 
     } 
    } 
} 

答えて

1

フラグはエレガントではありませんが、この場合は実用的な解決策だと思います。あなたはそれがすべての単語に表示したくない場合は、ループの外に旗や保釈金を設定することができます。

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

    } 
} 

アプリケーションにこれを置けば、あなたのファイルディスクリプタをクローズするのを忘れないでください。

+0

あなたの答えはBergerよりも効率的ですが、今削除されても、ストリームを閉じることはありません(OPはどちらも気にしません)。 – Mena

1

あなたBufferedReaderは、各ラインの読み取りで、読み込み可能な状態であるので、それが読み込まれています各行の値を印刷しますしているときは、ループ内であなたのUNIQUENOT_UNIQUE出力を印刷しています。

おそらくあなたのデザインをここでリファクタリングする必要があります。 以下のロジックは、実際にファイルから読み取られたデータ全体を保持したい場合にのみ適用されます。それ以外の場合は、より効率的なソリューションがあります(Max Mammelを参照)。

  • List
  • ストア、それらをファイルからすべての行を読んで読み終わったとき(つまりにそれをトリミングします新しいSetはそのコンストラクタであなたのListを渡して初期化し、
  • (重複を可能にします)ユニークなStringのセット)
  • 次に、両方のサイズを比較してください - 異なる場合は、ユニークでないアイテムがあります
  • オフトピック:ストリームを閉じることを忘れないでください!
+0

ありがとうございました。 –

+0

@Alexよろしくお願いします! – Mena

+0

オフトピックについては、ストリームを閉じることはどういう意味ですか? –

関連する問題