堆栈重新排列堆栈甚至奇数

时间:2014-12-14 02:46:28

标签: java stack

我编写此方法以重新排列两个堆栈的元素,使得堆栈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

1 个答案:

答案 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);
    }
}