是否可以在 Java 中以某种方式索引数组,例如arr1[arr2]
if arr1
is anint[][]
和arr2
an int[2]
。
我想要一种更好的方法来实现与arr1[arr2[0]][arr2[1]]
看起来非常糟糕的相同。更好的意思是更容易阅读和理解。
是否可以在 Java 中以某种方式索引数组,例如arr1[arr2]
if arr1
is anint[][]
和arr2
an int[2]
。
我想要一种更好的方法来实现与arr1[arr2[0]][arr2[1]]
看起来非常糟糕的相同。更好的意思是更容易阅读和理解。
如果 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];
您可以做的另一件事是记住多维数组是数组的数组......
因此,您可以执行以下操作:
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]]
如果您有一个已知维度的矩形二维数组m×n
,那么您可以使用getValue
and方法对其进行补充,并使用从to范围内的一个变量setValue
访问其元素。position
1
m×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 数组中表示索引的更简单方法