2016-11-14 50 views
-2

即時通訊的問題是,我正在從文件(罰款)中讀取數據到程序中,並將數據安排到堆棧中(也很好),但我有問題,因爲我試圖解決以避免有任何重複數據進入堆棧。爪哇:添加到成套集

我一打聽,建議使用一組,我有,但我不知道怎麼弄出來的數據集,並進入書庫

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

或者,如果你把元素stack2只有當元素不在stack1也不stack2那麼你應該重寫謂語在第二if語句。

1

在你走之前,是否絕對要求使用Stack?這個類的Javadoc說:「Deque接口及其實現提供了一套更完整和一致的LIFO堆棧操作,應該優先使用這個類。」

此外,是否也需要使用StringTokenizer?該類的Javadoc說:「StringTokenizer是一個遺留類,爲了兼容性原因保留,儘管它在新代碼中的使用不受歡迎。建議任何尋求該功能的人都使用String或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++; 
}