2010-01-09 36 views
1

我不想在這裏複製線程。 我的問題是我管道中使用msdos文件調用amazon.txt 該文件中有637字在其中.. 我想計數的唯一字..而不是計數的「一個」,「該」,「這種」 我還沒有在代碼計數尚未..將文件添加到文件收藏框架

當我添加到樹上設置它只有8個字.. 應該有atlest 300個獨特的話..總文件的

計數= 637 treeset = 8的count2

我以爲treeset處理重複?我究竟做錯了什麼? 該文件確實包含了一些整型的$

import java.util.Scanner; 
import java.util.ArrayList; 
import java.util.TreeSet; 
import java.util.Iterator; 
import java.util.HashSet; 

public class practice1 
{ 
    public static void main(String[] args) 
    { 
     Scanner  sc = new Scanner(System.in);  
     String  word; 
     //String grab; 
     int count = 0; 
     int count2 =0; 
     int count3 =0; 
     int count4 =0; 
     int number; 
     //ArrayList<String> a = new ArrayList<String>(); 
     TreeSet<String> a = new TreeSet<String>(); 

     while (sc.hasNext()) 
     { 
      word = sc.next(); 
      count++;   // 637 words 
      a.add(word); 
      if (word.equals("---")) 
      { 
       break; 
      } 
     } 

     Iterator<String> it = a.iterator(); 

     while(it.hasNext()) 
     { 
      string grab = it.next(); 
      count2++;     // 8 words 

      if (grab.equals("---")) 
      { 
       break; 
      } 
     } 

     System.out.println("count2"); 
     System.out.println(count2); 
     System.out.println("count"); 
     System.out.println(count);   
     System.out.println("\nbye..."); 
    } 
} 
+0

歡迎光臨!初學者提示:不要在編輯器中混合製表符和空格。它會亂碼縮進。在大多數體面的編輯器中,您可以配置爲每個選項卡插入4個空格。 – BalusC 2010-01-09 05:27:53

+0

請不要再使用製表符 - 您需要修復編輯器,以便將製表符轉換爲空格,並且無論您使用哪種編輯器,都會發現代碼可讀。 – TofuBeer 2010-01-09 05:30:16

+0

@TofuBeer:在Eclipse中複製粘貼,點擊Ctrl + Shift + F',copypaste回來;) – BalusC 2010-01-09 05:34:26

回答

0

我沒有看到任何地方你要添加的字到TreeSet的「A」。

如果我只是錯過了(我可能會),我敢打賭問題是TreeSet不能保證按照插入順序迭代。也就是說,最後添加「---」,但沒有理由不會從迭代器8中出來並終止程序。

所以我會說擺脫檢查你看到如果迭代器返回「---」,看看哪裏得到你。


來得及驗證,更改:

if (grab.equals("---")) 
    { 
     break; 
    } 

到:

if (grab.equals("---")) 
    { 
     //break; 
    } 

,它按預期工作。

祝你好運!

+0

我正在評論一些代碼,我意外地拿出了添加部分。我把它加回來.. – icelated 2010-01-09 05:44:33

2

用於統計TreeSet中條目數的方法是迭代Set並在第一次看到字符串"---"時停止計數。

這是不正確的。你可能假設的條目由TreeSet.iterator()返回的順序爲它們被插入的相同順序isn't the case

的元素使用其自然順序進行排序,或者由集合創建時提供的比較,這取決於使用哪個構造函數。

「自然排序」在這裏指的String.compareTo(String)的結果(因爲字符串實現Comparable<String>),這對於字典順序測試。換句話說,TreeSet<String>的迭代器按字母順序返回項目。

如果你想知道你的套裝的大小,只需使用size()

+0

好趕上...我只是不添加---它應該可能工作(我沒有添加它爲我的測試...哎呀)。只需將if(word.equals(「---」))部分移動到add上方即可。 – TofuBeer 2010-01-09 06:57:01

+0

不,你應該改變你計算TreeSet大小的方式。當你找到一個標記時,你不能停止,因爲迭代順序與插入順序不同。 – 2010-01-09 13:57:36

0

沒有必要要迭代的第二次,只需更換第二環與

System.out.println("Treeset.size():" + a.size()); 

和不添加「---」在第一循環中TreeSet中(假設這是某種結束文件標記)

if (word.equals("---")) 
{ 
    break; 
} 
a.add(word);