1. ホーム
  2. java

[解決済み] javaでスタックを反転させる

2022-02-19 13:32:30

質問内容

    public static void reverse(Stack arr){
    Queue<Integer> arrCopy=new LinkedList<Integer>();
    while(!arr.empty()){
        arrCopy.add((int)arr.pop());
    };
    System.out.print("{ ");
    while(!arrCopy.isEmpty()){
        System.out.print((int)arrCopy.remove() + ", ");
    }
    System.out.print("}");
}

キューを作成し、pop を使ってスタックから整数を取り出して返すたびに、それをキューに追加していく新しいメソッドを書きました。 while(!arrCopy.isEmpty()) キャスティングに問題があるのか、それともキューに要素を追加する方法に問題があるのでしょうか?

ありがとうございます。

を編集します。 ここに私のメイン関数のコード(私のコードの残りの部分です)があります。

public static void main(String[] args) {
        Random rand = new Random();
        Stack<Integer> a=new Stack<Integer>();

        for (int i=0; i<10; i++){
            a.push(rand.nextInt(50));
        }
        System.out.print("{ ");
        while(!a.empty()){
            System.out.print((int)a.pop() + ", ");
        }
        System.out.print("}");

        reverse(a);


}

ソリューション : うまくいきました!ありがとうございます!問題は、反転する前にプリントするために、スタックからすべての要素を返す(まだ取り除く)ためにpopを使っていたことで、結果的にスタックが空になっていました。

    public static Queue reverse(Stack arr){
    Queue<Integer> arrCopy=new LinkedList<Integer>();
    while(!arr.empty()){
        arrCopy.add((int)arr.pop());
    }
    return arrCopy;
}

public static void main(String[] args) {
        Random rand = new Random();
        Stack<Integer> a=new Stack<Integer>();

        for (int i=0; i<10; i++){
            a.push(rand.nextInt(50));
        }

         System.out.println("List:");
         System.out.println(a);

         System.out.println("Reversed List:");
         System.out.println(reverse(a));


}

解決方法は?

これです。

while(!a.empty()){
    System.out.print((int)a.pop() + ", ");
}
System.out.print("}");

reverse(a);

あなたは スタックを空にする を呼び出す前に reverse . までスタックから要素をポップアップし続けると a.empty() が真を返した場合、スタックを空にしたことになり、空のスタックを reverse メソッドを使用します。

使えばいいじゃん。

System.out.println(a);
reverse(a);

印刷するために、スタックからすべての要素をポップアップする必要はありません。