2014-12-14 5 views
0

Я пишу этот метод, чтобы переупорядочить элементы двух стеков таким образом, что стек s1 содержит только четные целые числа, а стек s2 содержит только нечетные целые числа. и любые нули не должны храниться в s1 или s2.stack rerange stack odd even

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 тоже, как я могу устранить 0s?

здесь является основным методом

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 

ответ

2

Ваш код положить ноль в нечетной стек из-за того, как вы написали, если-заявление:

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