如何解决索引多维数组
如果 arr1[arr2]
是 arr1
而 int[][]
是 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
的 矩形 二维数组,那么您可以使用 getValue
和 setValue
方法对其进行补充,并使用一个变量 position
,范围从 1
到 m×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;
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。