if语句-Java:在deque中根据奇数还是偶数将整数放在第一位或最后一位



我必须编写一个程序,在deque中添加整数,以便奇数在deque最后添加,偶数在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);

  }
}

@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],这正是您想要的(奇数在后,偶数在前)。

edit:要向@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的每个数字现在都将以所需的方式添加。

因此,在for循环后没有得到正确结果的原因是d.poll()正在检索(并移除)deque的头部。由于当前头是10并且是偶数,因此它将被添加到头(即addFirst)。现在,由于它被添加到了deque的头部,当我们再次投票时,我们又得到了10!因此,在循环结束时,deque保持与以前相同的状态。

这里有两个选项(IMO)。

(1) 在将值添加到deque之前,请检查INTEGER/数字是否为偶数/奇数。

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

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

干杯!

最新更新