我正在尝试通过使用集合的ArrayLists列表来表示8x8电路板。当我运行这段代码时,print语句显示调用了正确的坐标。
static List<ArrayList<Integer>> BOARD = new ArrayList<>();
static {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
BOARD.add(i, new ArrayList<>());
System.out.println("i "+i + " j "+j);
BOARD.get(i).add(i);
BOARD.get(i).add(j);
}
System.out.println("break");
System.out.println();
}
}
"First Iteration"
i 0 j 0
i 0 j 1
i 0 j 2
i 0 j 3
i 0 j 4
i 0 j 5
i 0 j 6
i 0 j 7
break但是,它实际上并没有将正确的元素放入列表中,因此它返回以下内容:
[[0, 7], [1, 7], [2, 7], [3, 7], [4, 7], [5, 7], [6, 7], [7, 7], [7, 6], [7, 5], [7, 4], [7, 3], [7, 2], [7, 1], [7, 0], [6, 6], [6, 5], [6, 4], [6, 3], [6, 2], [6, 1], [6, 0], [5, 6], [5, 5], [5, 4], [5, 3], [5, 2], [5, 1], [5, 0], [4, 6], [4, 5], [4, 4], [4, 3], [4, 2], [4, 1], [4, 0], [3, 6], [3, 5], [3, 4], [3, 3], [3, 2], [3, 1], [3, 0], [2, 6], [2, 5], [2, 4], [2, 3], [2, 2], [2, 1], [2, 0], [1, 6], [1, 5], [1, 4], [1, 3], [1, 2], [1, 1], [1, 0], [0, 6], [0, 5], [0, 4], [0, 3], [0, 2], [0, 1], [0, 0]]我显然在这里遗漏了一些东西,我已经写了几个小时的代码,似乎看不到bug。这是Collections的一个特征吗?我以为只有队列才会这样;但我也不能完全确定。
发布于 2020-04-23 15:44:02
EDIT:我已经将new ArrayList<>()创建添加到了第一个循环中,因此对于外部列表的每个索引都有一个列表
尝试下面的代码并检查:
static List<ArrayList<Integer>> BOARD = new ArrayList<>();
static {
for (int i = 0; i < 8; i++) {
BOARD.add(i, new ArrayList<>());
for (int j = 0; j < 8; j++) {
System.out.println("i "+i + " j "+j);
BOARD.get(i).add(i);
BOARD.get(i).add(j);
}
System.out.println("break");
System.out.println();
}
}EDIT-2:
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
ArrayList<Integer> integers = new ArrayList<>();
integers.add(i);
integers.add(j);
BOARD.add(integers);
}
System.out.println("break");
System.out.println();
}发布于 2020-04-23 15:45:26
您的问题是,您在每次迭代中为j创建了一个新的ArrayList,并替换了旧的。把它移到上面的循环中,它就会工作。试试这个:
for (int i = 0; i < 8; i++) {
BOARD.add(i, new ArrayList<>());
for (int j = 0; j < 8; j++) {
System.out.println("i " + i + " j " + j);
BOARD.get(i).add(i);
BOARD.get(i).add(j);
}
System.out.println("break");
System.out.println();
}输出第一次迭代:
i 0 j 0
I 0 j 1
I 0 j 2
I 0 j 3
I 0 j 4
I 0 j 5
I 0 j 6
I 0 j 7
中断
更新的需求
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
final ArrayList<Integer> array = new ArrayList<>();
array.add(i);
array.add(j);
BOARD.add(array);
System.out.println("i " + i + " j " + j);
}
System.out.println("break");
System.out.println();
}结果数组:
[[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [0, 6], [0, 7], [1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [2, 0], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5], [2, 6], [2, 7], [3, 0], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5], [3, 6], [3, 7], [4, 0], [4, 1], [4, 2], [4, 3], [4, 4], [4, 5], [4, 6], [4, 7], [5, 0], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5], [5, 6], [5, 7], [6, 0], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [7, 0], [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 7]]https://stackoverflow.com/questions/61381739
复制相似问题