簡體   English   中英

誰能告訴我我在做什么錯? -堆棧

[英]Can anyone tell me what I'm doing wrong? - Stacks

我需要編寫一個方法,執行以下壓縮操作;

方法compress的目標是從堆棧s1中刪除所有空元素。 其余(非空)元素應按其初始順序保留在s1上。 輔助堆棧s2應該用作s1中元素的臨時存儲。 在此方法的計算結束時,堆棧s2應具有與計算開始時相同的內容。 有關方法compress預期行為的示例,請參見方法main。

到目前為止,我有;

import net.datastructures.ArrayStack;
import net.datastructures.Stack;

public class Stacks {

public static <E> void compress(Stack<E> S1, Stack<E> S2) {

    int counter = 0;
    while (!S1.isEmpty()) {

    }
    if (S1.top() == null) {
        S1.pop();
    } else if (S1.top() != null) {
        S2.push(S1.pop());

        counter++;
    }

    for (int i = counter; i < counter; i++) {

        S2.push(S1.pop());
    }
}

public static void main(String[] args) {
    // test method compress
    Stack<Integer> S1 = new ArrayStack<Integer>(10);
    S1.push(2);
    S1.push(null);
    S1.push(null);
    S1.push(4);
    S1.push(6);
    S1.push(null);

    Stack<Integer> S2 = new ArrayStack<Integer>(10);
    S2.push(7);
    S2.push(9);

    System.out.println("stack S1: " + S1);
    // prints: "stack S1: [2, null, null, 4, 6, null]"

    System.out.println("stack S2: " + S2);
    // prints: "stack s2: [7, 9]"

    compress(S1, S2);

    System.out.println("stack S1: " + S1);
    // should print: "stack S1: [2, 4, 6]"

    System.out.println("stack S2: " + S2);
    // should print: "stack S2: [7, 9]"
}

}

我無法弄清楚哪里出了問題,代碼在compress方法之前打印了兩行,然后什么也不打印。

while (!S1.isEmpty()) {

}

在那里,您有一個無限循環。

我想在if()里面寫if ... else如下

while (!S1.isEmpty()) {
if (S1.top() == null) {
    S1.pop();
} else if (S1.top() != null) {
    S2.push(S1.pop());

    counter++;
}

}

在你的里面,因為它一定是

for (int i = counter; i < counter; i++) {

    S1.push(S2.pop());
}

猜它應該工作

我在您的代碼中發現了兩個錯誤。 每個周期一次。

  1. 您的while循環應在緊隨其后包裝條件。
  2. 您的for循環的增量變量分配錯誤。

正確的版本應為:

public static <E> void compress(Stack<E> S1, Stack<E> S2) {
    int counter = 0;

    while (!S1.isEmpty()) {
        if (S1.top() == null) {
            S1.pop();
        } else {
            S2.push(S1.pop());
            counter++;
        }
    }

    for (int i = 0; i < counter; i++) {
        S1.push(S2.pop());
    }
}

編輯:等效的for循環(也許您正在嘗試編寫此循環)可能如下。

for (int i = counter; i > 0; i--) {
    S1.push(S2.pop());
}

第二次編輯:切換了for循環中的變量(S2位於S1的位置,反之亦然)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM