【问题标题】:Copy coordinates of one 2D array to another array将一个二维数组的坐标复制到另一个数组
【发布时间】:2021-06-09 01:04:40
【问题描述】:

我有一个二维数组freeSpace[][],它代表xy 坐标。如果该空间“不可用”,则我将其标记为77,其他1

我想将所有标记为77 的元素放入它自己的数组中,并带有这些特定的数组坐标。我认为它应该很简单,但我就是无法正确语法。

这是我的代码:

for (int v = 0; v < info.getScene().getHeight(); v++) {
    for (int h = 0; h < info.getScene().getWidth(); h++) {
        //System.out.print(freeSpace[h][v] != 77 ? "." : "#");
        if (freeSpace[h][v] == 77) {
            blockedCoordinates = new int[][]{{h, v}};
        }
    }
    System.out.println();
}

我已经声明了blockedCoordinates[][] 数组。

我的大多数尝试都导致了一个空数组。

【问题讨论】:

  • 对于每个非可用空间,您完全声明了一个新的blockedCoordinates 数组,覆盖了以前的任何内容您能否举一个网格的小示例(例如,3x3)以及您对@987654330 的期望@ 数组之后看起来像?此外,对于只有两个状态,boolean 就足够了,或者更好的是,enum 所以以后可以轻松添加更多。

标签: java arrays multidimensional-array


【解决方案1】:

您在复制数据时出错,原因如下:

// assuming following definition
int[][] blockedCoordinate = new int[][]{};

for (int v = 0; v < info.getScene().getHeight(); v++) {
    for (int h = 0; h < info.getScene().getWidth(); h++) {
        //System.out.print(freeSpace[h][v] != 77 ? "." : "#");
        if (freeSpace[h][v] == 77) {
            // Make a copy
            int[][] copyBlockedCoordinate = blockedCoordinates;
            // extend the array length by 1
            blockedCoordinates = new int[copyBlockedCoordinate.length + 1][2];
            for (int i = 0; i < copyBlockedCoordinate.length; i++) {
                for (int j = 0; j < copyBlockedCoordinate[i].length; j++) {
                    blockedCoordiante[i][j] = copyBlockedCoordinate[i][j];
                }
            }
            // add new array at new or last index position in blockedCoordinate array
            blockedCoordinate[copyBlockedCoordinate.length] = {h, v};
        }
    }
    // Make sure you write what you want to the console here to debug :)
    System.out.println();
}

【讨论】:

  • 我得到了一个用blockedCoordinates.length 测试过的新数组,它似乎可以工作(不确定它是否复制了坐标?试图弄清楚如何测试它)。我认为它有效。我不得不评论blockedCoordinate[copyBlockedCoordinate] = {h, v};因为它给了我一个类型错误。不确定这是做什么的?它是否将坐标位置复制到下一个矩阵 - 在这种情况下,它将不起作用,看看我是否能为该行找出更合适的语法。
  • 你说得对,我的错,在那个地方我忘了。在该行添加属性 .length :)
  • 我现在也修复了,请务必检查并标记为答案。
  • 第二部分出现错误,“数组常量只能在初始化程序错误中使用”我通过编辑以下行来修复: blocksArray[copyBlockedCoordinate.length] = new int[]{h, v};这一切似乎都有效,至少比以前更好,必须继续努力。但我现在将其标记为已回答 =)
  • 离开这个话题几天后,我又回到了这个话题。我仍然遇到错误,尤其是在这条线上。除了评论之外,有人可以向我解释发生了什么吗? =) // 在新索引位置添加新数组 blocksArray[blocksArray.length] = new int[]{xPixels, yPixels};我收到一个错误:java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1。我现在正在研究。
猜你喜欢
  • 2021-12-31
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 2022-12-07
相关资源
最近更新 更多