【发布时间】:2019-04-14 10:13:03
【问题描述】:
任务是编写一个读取数字并将它们存储到双端队列的程序。
样本输入为:4 1 2 3 4 样本输出:4 2 1 3
应该添加一个偶数作为第一个元素,一个奇数 - 作为最后一个元素。之后,程序必须输出从第一个到最后一个的所有元素。
这是我的一段代码:
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Deque<Integer> deque = new ArrayDeque<>(sc.nextInt());
while (sc.hasNext()) {
int nextInt = sc.nextInt();
if (nextInt % 2 == 0) {
deque.addFirst(nextInt);
} else deque.addLast(nextInt);
}
for (int elt : deque) {
System.out.println(elt);
}
}
}
样本输出:4 2 1 3
它工作正常,它是正确的。但是!
让我们重写
Deque<Integer> deque = new ArrayDeque<>(sc.nextInt())
作为
Deque<Integer> deque = new ArrayDeque<>(4)
对于这个,示例输出为: 4 2 4 1 3 。 也就是说,它是不正确的。
为什么以不同方式输入相同容量会产生如此不同的结果?
【问题讨论】:
-
在第一种情况下,您向用户询问第一个整数并将其用作双端队列的容量。然后将接下来的 4 个整数存储在双端队列中。在第二种情况下,您将所有 5 个整数存储在双端队列中,因为您不再使用第一个作为双端队列的容量……您应该能够自己弄清楚。养成调试代码的习惯,可以使用调试器逐行执行,也可以简单地在代码中添加 println() 语句以了解发生了什么。
标签: java collections arraydeque