![](/img/trans.png)
[英]Can someone tell me what I'm doing wrong to setup this Robot class in Java?
[英]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());
}
猜它应该工作
我在您的代码中发现了两个错误。 每个周期一次。
while
循环应在紧随其后包装条件。 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.