首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java ArrayList - 8x8游戏板

Java ArrayList - 8x8游戏板
EN

Stack Overflow用户
提问于 2020-04-23 15:36:39
回答 2查看 238关注 0票数 0

我正在尝试通过使用集合的ArrayLists列表来表示8x8电路板。当我运行这段代码时,print语句显示调用了正确的坐标。

代码语言:javascript
复制
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

但是,它实际上并没有将正确的元素放入列表中,因此它返回以下内容:

代码语言:javascript
复制
[[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的一个特征吗?我以为只有队列才会这样;但我也不能完全确定。

EN

回答 2

Stack Overflow用户

发布于 2020-04-23 15:44:02

EDIT:我已经将new ArrayList<>()创建添加到了第一个循环中,因此对于外部列表的每个索引都有一个列表

尝试下面的代码并检查:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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();
        }
票数 2
EN

Stack Overflow用户

发布于 2020-04-23 15:45:26

您的问题是,您在每次迭代中为j创建了一个新的ArrayList,并替换了旧的。把它移到上面的循环中,它就会工作。试试这个:

代码语言:javascript
复制
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

中断

更新的需求

代码语言:javascript
复制
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();
}

结果数组:

代码语言:javascript
复制
[[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]]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61381739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档