微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

索引多维数组

如何解决索引多维数组

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

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

解决方法

在 Java 中是否可以像 arr1[arr2] 那样索引一个数组,如果 arr1 是一个 int[][] 和 arr2 一个 int[2]

如果 arr1[arr2]arr2,则

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

编辑

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

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

第二次编辑

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

arr1
,

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

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

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

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

印刷品

[4,6]


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

印刷品

[[1,3],[4,99,6]]
,

如果您有一个已知尺寸 m×n矩形 二维数组,那么您可以使用 getValuesetValue 方法对其进行补充,并使用一个变量 position,范围从 1m×n

Assignment,Arithmetic,and Unary Operators

  • / - 除法运算符
  • % - 余数运算符
public class Test {
    static int m = 3,n = 4;
    static int[][] array = {{1,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,4],[90,8],[9,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;
        }
    }
}

另见:Easier way to represent indicies in a 2D array

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。