我需要寫一個方法,壓縮做以下操作;任何人都可以告訴我我做錯了什麼嗎? - 堆棧
方法compress的目標是從堆棧s1中刪除所有空元素。其餘(非空) 元素應按照其初始順序保留在s1上。輔助堆棧s2應作爲 用於來自s1的元素的臨時存儲。在此方法計算結束時, 堆棧s2應具有與計算開始時相同的內容。請參閱方法 main以瞭解方法compress的預期行爲的示例。
到目前爲止我有;
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]"
}
}
我想不通哪裏出錯,代碼在壓縮方法之前打印兩行,然後不打印任何內容。
我想當你清理'S2'時,你需要執行'S1.push(S2.pop());' – 2013-02-23 20:58:19
你是否嘗試在調試器中逐步調試代碼? – millimoose 2013-02-23 20:58:40
此外,循環'while(!S1.isEmpty())'什麼也不做,你只檢查S1中的一個元素。 (除非這是一個錯字) – millimoose 2013-02-23 20:59:42