1

スタック内の重複を削除し、昇順でソートされた結果のスタックを返すメソッドを作成しました。たとえば、メイン関数を見ると、1、3、4、7 として出力されるはずですが、代わりに元のスタック データが出力されますが、これは正しくありません。助言がありますか?

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

2 に答える 2

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);
于 2016-07-05T10:14:42.550 に答える
1

System.out.println(s) は、以前に初期化された s オブジェクトのみを出力します。スタックの新しいオブジェクトを作成するか、再初期化しない限り、removeDouble(s) は何の影響もありません...

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

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

    
于 2013-06-23T14:00:02.380 に答える