2016-11-14 6 views
-2

問題は、ファイルから(罰金)プログラムにデータを読み込み、データをスタックに配置することですが、重複したデータがスタックに入るのを避けるためです。Java:セットからスタックに追加する

私は周りに頼み、私が持っているセットを、使用することを推奨されていましたが、私は(私が現在持っているコードであることセットのうち、およびスタック

Stack<String> stack1 = new Stack<String>(); 
    Stack<String> stack2 = new Stack<String>(); 
    Set<String> duplicateCheck = new HashSet<String>(); 



    try 
    { 
     //Read file 
     File myFile = new File("TestData.txt"); 
     FileReader fr = new FileReader(myFile); 
     BufferedReader br = new BufferedReader(fr); 
     String line = null; 
     int count = 0; 
    while((line = br.readLine()) != null) 
     { 
      StringTokenizer st = new StringTokenizer(line,","); 
      while(st.hasMoreElements()) 
      { 
       duplicateCheck.add(st.nextToken()); 

       if(count < 9) 
       { 
        stack1???????????????; 
       } 
       if(count >9 && count <19) 
       { 
        stack2???????????????; 
       } 
       if(count >= 19) 
       { 
        System.out.println("Capacity has been reached"); 
       } 
       count++; 
      } 
     } 

にデータを取得する方法が分かりませんマイナスすべての疑問符)と誰もが私が間違って行くこともどこへといくつかのポインタを与えることができれば、ITDずっと

+0

あなたのスタックサイズの要件(カウントの理由)は何ですか?ループ内のSetを単に埋めるだけで、ループが終了した後にスタックに追加することができます。 –

答えて

2

を理解さスタックがVectorからcontains(Object o)機能を継承:だからhttps://docs.oracle.com/javase/7/docs/api/java/util/Vector.html#contains(java.lang.Object)

を、このようなものは動作するはずです:

String currentToken = st.nextToken(); 
    if(count < 9) { 
     if (! stack1.contains(currentToken)) { stack1.add(currentToken); } 
    } 
    if(count >9 && count <19) { 
     if (! stack2.contains(currentToken)) { stack2.add(currentToken); } 
    } 

それとも要素がstack1stack2していない場合にのみ、if文、あなたが第二に述語を書き換えなければならないstack2に要素を入れたい場合。

1

さらに進む前に、Stackを絶対に使用する必要がありますか?このクラスのJavadocは次のように述べています。「より完全で一貫性のあるLIFOスタック操作のセットは、Dequeインターフェイスとその実装によって提供されます。このクラスは、このクラスに優先して使用する必要があります。

さらに、StringTokenizerを使用する必要がありますか?そのクラスのJavadocはこう書いています: "StringTokenizerは互換性のために残されたレガシークラスですが、新しいコードではその使用が推奨されていませんが、この機能を求める人はStringのsplitメソッドまたはjava.util.regexパッケージ代わりに。

古くなったバージョンのJavaを使用している非常に古い本から作業していると思われますか?

今、あなたの質問に。あなたはやっているように、Setを使って重複をチェックすることができます。そのaddメソッドは、既に存在していない要素がこの呼び出しで追加された場合はtrueを返し、要素が既に存在していたため追加されなかった場合はfalseを返します。したがって、このようなセットを使用することができます:

String token = st.nextToken(); 
if (duplicateCheck.add(token)) { 
    if (count < 9) 
     stack1.add(token); 
    else if (count < 19) 
     stack2.add(token); 
    else 
     System.out.println("Capacity has been reached"); 
    count++; 
} 
関連する問題