0

是否可以在 Java 中以某种方式索引数组,例如arr1[arr2]if arr1is anint[][]arr2an int[2]

我想要一种更好的方法来实现与arr1[arr2[0]][arr2[1]]看起来非常糟糕的相同。更好的意思是更容易阅读和理解。

4

3 回答 3

3

如果 arr1 是 int[][] 并且 arr2 是 int[2] 是否可以在 Java 中以某种方式索引数组,例如 arr1[arr2]

arr1[arr2]arr2如果是则无效int[]。唯一可以放在方括号之间的是数字(或引用该数字的变量)。 arr1[arr2[0]]是有效的(假设两个数组中至少有 1 个元素),因为arr2[0]将是int.

编辑

在我发布此答案后,问题已更改为包括“编辑:我想实现与arr1[arr2[0]][arr2[1]]”相同。

实现您所展示的方式正是您所展示的,假设arr1是 a int[][]arr2是 a int[]arr1在第一维中至少有一个元素,并且它的值是一个至少有 2 个元素的数组。

第二次编辑

你说“我想要一种更好的方法来实现 arr1[arr2[0]][arr2[1]]”。“更好”是主观的。如果您想在更少的代码行方面做得更好,那么它不会变得更好,因为您拥有最少的代码行数 (1)。如果你想让它更容易阅读,你可以这样做:

// of course, knowing the nature of the data
// would allow better variable names...
int firstElementInArr2 = arr2[0];
int secondElementInArr2 = arr2[1];
int[] outerArray = arr1[firstElementInArr2];
int result = outerArray[secondElementInArr2];
于 2021-04-12T19:50:13.847 回答
0

您可以做的另一件事是记住多维数组是数组的数组......

因此,您可以执行以下操作:

int[][] arr = {{1,2,3},{4,5,6}};

int[] a = arr[1];
System.out.println(Arrays.toString(a));

印刷

[4, 5, 6]


a[1] = 99;
System.out.println(Arrays.deeptoString(arr);

印刷

[[1, 2, 3], [4, 99, 6]]
于 2021-04-12T20:09:33.803 回答
0

如果您有一个已知维度的矩形二维数组m×n,那么您可以使用getValueand方法对其进行补充,并使用从to范围内的一个变量setValue访问其元素。position1m×n

赋值、算术和一元运算符

  • /- 部门运营商
  • %- 余数运算符
public class Test {
    static int m = 3, n = 4;
    static int[][] array = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

    public static void main(String[] args) {
        System.out.println(getValue(5));     // 5
        System.out.println(setValue(5, 90)); // true
        System.out.println(getValue(5));     // 90
        System.out.println(Arrays.deepToString(array));
        // [[1, 2, 3, 4], [90, 6, 7, 8], [9, 10, 11, 12]]
    }

    public static int getValue(int pos) {
        if (pos >= 1 && pos <= m * n) {
            int i = (pos - 1) / m; // row
            int j = (pos - 1) % n; // column
            return array[i][j];
        } else {
            return 0;
        }
    }

    public static boolean setValue(int pos, int value) {
        if (pos >= 1 && pos <= m * n) {
            int i = (pos - 1) / m; // row
            int j = (pos - 1) % n; // column
            array[i][j] = value;
            return true;
        } else {
            return false;
        }
    }
}

另请参阅:在 2D 数组中表示索引的更简单方法

于 2021-04-16T23:24:39.410 回答