2013-06-23 51 views
1

我做了一個方法,刪除堆棧中的任何副本並返回按升序排序的結果堆棧。例如,查看主函數,它應該輸出爲1,3,4,7。但是,它會輸出原始堆棧數據,這是不正確的。有什麼建議麼?從Java中刪除堆棧中的重複值

import java.util.ListIterator; 
import java.util.Stack; 

public class removeDoubleInStack { 
    public static Stack<Integer> removeDouble(Stack<Integer> s) { 
     Stack<Integer> tempStack = new Stack<Integer>(); 

     ListIterator<Integer> iter = s.listIterator(); 
     while(iter.hasNext()) { 
      int tempNext = iter.next(); 
      if(tempNext != iter.next()) 
       tempStack.add(tempNext);   
     } 
     return tempStack; 
    } 

    public static void main(String[] args) { 
     Stack<Integer> s = new Stack<Integer>(); 
     s.add(1); 
     s.add(3); 
     s.add(3); 
     s.add(4); 
     s.add(7); 
     s.add(7); 

     removeDouble(s); 
     System.out.println(s); 
    } 
} 

回答

1

System.out.println(s)僅打印之前已初始化的對象。 removeDouble(S)沒有任何影響,除非你創建堆棧的新對象或重新初始化...

公共靜態無效的主要(字串[] args){

Stack<Integer> s = new Stack<Integer>(); 
    s.add(1); 
    s.add(3); 
    s.add(3); 
    s.add(4); 
    s.add(7); 
    s.add(7); 

    Stack<Integer> tempStack = removeDouble(s); // create new object 
    System.out.println(tempStack); 

}

+0

好的謝謝,但它只輸出[1,3],其中4和7丟失。 – Shuvo0o

1

正如你可以在文檔中看到,有什麼相似的刪除重複

https://docs.oracle.com/javase/6/docs/api/java/util/Stack.html

,但你可以做到這一點的時候:

1-獲取堆棧的元素枚舉

2 - 轉成枚舉列表

3-添加列表中設置

4-明確棧

5-附加設置爲堆疊

實施例:

final Stack<Integer> ms = new Stack<Integer>(); 
    ms.add(0); 
    ms.add(0); 
    ms.add(0); 
    ms.add(1); 
    ms.add(1); 
    ms.add(1); 
    ms.add(3); 
    ms.add(56); 
    System.out.println("Before clean:\n" + ms); 
    final Set<Integer> s = new HashSet<Integer>(Collections.list(ms.elements())); 
    ms.clear(); 
    ms.addAll(s); 
    System.out.println("After clean:\n" + ms);