我编写此方法以重新排列两个堆栈的元素,使得堆栈s1仅包含偶数整数,堆栈s2仅包含奇数整数。并且任何零都不应存储在s1或s2中。
public static void rerange(stackl l1 , stackl l2)
{
stackl tmp = new stackl();
stackl tmp2 = new stackl();
while(!l1.isEmptyS())
{
int x = l1.pop();
if(x!=0 && x%2==0)
tmp.push(x);
else
tmp2.push(x);
}
while(!l2.isEmptyS())
{
int y = l2.pop();
if(y!=0 && y%2==0)
tmp.push(y);
else
tmp2.push(y);
}
tmp.prints();
System.out.println();
tmp2.prints();
}
它运作良好,但它也排序ero,我怎么能消除0?
这是主要方法
public static void main(String[] args) {
stackl s1 = new stackl();
stackl s2 = new stackl();
s1.push(0);
s1.push(2);
s1.push(3);
s1.push(5);
s1.push(6);
s1.prints();
System.out.println();
s2.push(1);
s2.push(10);
s2.push(9);
s2.push(0);
s2.push(15);
s2.prints();
System.out.println();
rerange(s1,s2);
输出是:
6 5 3 2 0
15 0 9 10 1
10 2 6
1 9 0 15 0 3 5
答案 0 :(得分:2)
由于您编写if语句的方式,您的代码将零写入奇数堆栈:
if (x != 0 && x % 2 == 0)
// x is non-zero and even
tmp.push(x);
else
// all other numbers (x is zero, or odd)
tmp2.push(x);
当你在初步检查中将两个条件都混为一谈时,否则会接受对此的否定
由于逻辑!(A && B)
为!A || !B
,而您的if情况为"不为零甚至",您的其他内容实际上是"零或奇数"。
你需要做的是先检查零度,在这种情况下不要推送任何东西:
if (x != 0) {
if (x % 2 == 0) {
tmp.push(x);
} else {
tmp2.push(x);
}
}