Java:根据奇数或偶数

时间:2015-06-29 23:41:36

标签: java if-statement for-loop deque

我必须编写一个程序,在双端队列中添加整数,以便在双端队列中最后添加奇数,并且首先添加偶数。 我不知道在哪里添加if语句以添加数字以及如何使我的代码工作。 很抱歉,如果我的代码似乎错了,因为这是我的第一个deque程序。

package lesson1;
import java.util.*;


     public class MyClass1{

     public static void main(String[] args) {

     Deque<Integer> d= new LinkedList<Integer>();

     d.add(10);
     d.add(3);
     d.add(5);
     d.add(6);
     d.add(15);

     for(int i=0; i<d.size();i++){

         Integer head= d.poll();

         if(head%2==1){
             d.addLast(head);

         }

         else{
             d.addFirst(head);
         }

     }

     System.out.println(d);


  }

}

2 个答案:

答案 0 :(得分:2)

所以,你在for循环之后没有得到正确结果的原因是因为d.poll()正在检索(并删除)双端队列的头部。由于当前磁头是10并且它是偶数,它将被添加到磁头(即addFirst)。现在,因为它重新加入了双端队长,当我们再次进行民意调查时,我们再次获得10分!因此,在循环结束时,双端队列保持与以前相同的状态。

这里有两个选项(IMO)。

(1)在将值添加到双端队列之前,检查INTEGER /数字是偶数/奇数。

(2)如果你坚持先将原始值添加到双端队列中(在进行任何处理之前),请有一个单独的空双端队列来保存FOR循环中的最终结果。

无论哪种方式实现起来都是微不足道的。如果您对我上面提到的内容有任何疑问,请随时告诉我。

振作!

答案 1 :(得分:2)

@cottonman是正确的,我确实会使用这样一个单独的输入列表:

ArrayList<Integer> input = new ArrayList<>();
Deque<Integer> d = new LinkedList<>();

input.add(10);
input.add(3);
input.add(5);
input.add(6);
input.add(15);

for (Integer i : input) {
    if (i % 2 == 1) {
        d.addLast(i);
    } else {
        d.addFirst(i);
    }
}

System.out.println(d);

这将迭代input ArrayList并产生[6, 10, 3, 5, 15],这是你想要的(奇数最后,偶数数字)。

编辑:要回答@cottonman的问题,可以在添加时进行检查。要实现此目的,您可以匿名扩展LinkedList并覆盖add()方法:

Deque<Integer> d = new LinkedList<Integer>() {
    @Override
    public boolean add(Integer integer) {
        if (integer % 2 == 1) {
            super.addLast(integer);
        } else {
            super.addFirst(integer);
        }
        return true;
    }
};

d.add(10);
d.add(3);
d.add(5);
d.add(6);
d.add(15);

System.out.println(d);

这也将打印所需的输出,现在将以所需的方式添加添加到Deque的每个数字。