gpt4 book ai didi

java - 在Java中访问没有坐标的二维数组索引

转载 作者:行者123 更新时间:2023-11-30 06:15:49 25 4
gpt4 key购买 nike

假设我们有一个名为 grid 的 8 x 8 二维整数数组,并尝试选择 [5][5] 处的元素 0

int[][] grid = new int{{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,0,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1}};

现在的问题是,是否可以不使用坐标而仅使用单个数字来访问元素 0 的索引?

示例:使用数字 45 访问元素 0,就像一维数组一样

我尝试用 for 循环解决这个问题,但它给了我超出范围的错误。

int x = 0;
int y = 0;

for (int i = 0;i<45;i++) {

x += 1;

if (x > grid[y].length) {

x = 0;
y += 1;

}

上面的代码应该添加 x 和 y 直到到达目标元素。

最佳答案

最终您将不得不使用这两个索引。

您可以只给定一个数字来计算 x 和 y。

public static int getAt(int[][] matrix, int position) {
int columns = matrix[0].length; // column size, matrix has to be at least 1x1
return matrix[position / columns][position % columns];
}

public static void setAt(int[][] matrix, int position, int value) {
int columns = matrix[0].length; // column size, matrix has to be at least 1x1
matrix[position / columns][position % columns] = value;
}

也在您的示例中:

1)您不需要使用 for 循环(最终要访问或修改矩阵,您将必须使用两个索引)。

2) 当 y 大于或等于行大小(在本例中为 8)时,您将收到越界异常,因为您只有 8 列。

最后,使用一个索引访问它的唯一方法是将矩阵转换为一维数组。

在这里您可以看到如何: how to convert 2d array into 1d?

关于java - 在Java中访问没有坐标的二维数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49225768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com