索引多维数组
Indexing multidimensional array
如果 arr1
是一个 int[][]
并且 arr2
是一个 int[2]
,是否有可能在 Java 中以某种方式像 arr1[arr2]
索引一个数组.
我想要一种更好的方法来实现与 arr1[arr2[0]][arr2[1]]
相同的效果,这看起来非常糟糕。更好的意思是更容易阅读和理解。
Is it possible in Java to index an Array somehow like arr1[arr2] if
arr1 is an int[][] and arr2 an int[2]
如果 arr2
是 int[]
,则 arr1[arr2]
无效。方括号之间唯一可以插入的是数字(或引用数字的变量)。 arr1[arr2[0]]
是有效的(假设两个数组中至少有 1 个元素)因为 arr2[0]
将是 int
.
编辑
在我发布这个答案后,问题被更改为包括“编辑:我想达到与 arr1[arr2[0]][arr2[1]]
相同的效果”。
实现你所展示的方法,正是你所展示的,假设 arr1
是 int[][]
,arr2
是 int[]
,arr1
第一维至少有1个元素,其值为至少有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
和 setValue
方法对其进行补充并使用 one 变量 position
访问其元素,范围从 1
到 m×n
.
Assignment, Arithmetic, and Unary Operators
/
- 除法运算符
%
- 余数运算符
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;
}
}
}
另请参阅:
如果 arr1
是一个 int[][]
并且 arr2
是一个 int[2]
,是否有可能在 Java 中以某种方式像 arr1[arr2]
索引一个数组.
我想要一种更好的方法来实现与 arr1[arr2[0]][arr2[1]]
相同的效果,这看起来非常糟糕。更好的意思是更容易阅读和理解。
如果Is it possible in Java to index an Array somehow like arr1[arr2] if arr1 is an int[][] and arr2 an int[2]
arr2
是 int[]
,则 arr1[arr2]
无效。方括号之间唯一可以插入的是数字(或引用数字的变量)。 arr1[arr2[0]]
是有效的(假设两个数组中至少有 1 个元素)因为 arr2[0]
将是 int
.
编辑
在我发布这个答案后,问题被更改为包括“编辑:我想达到与 arr1[arr2[0]][arr2[1]]
相同的效果”。
实现你所展示的方法,正是你所展示的,假设 arr1
是 int[][]
,arr2
是 int[]
,arr1
第一维至少有1个元素,其值为至少有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
和 setValue
方法对其进行补充并使用 one 变量 position
访问其元素,范围从 1
到 m×n
.
Assignment, Arithmetic, and Unary Operators
/
- 除法运算符%
- 余数运算符
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;
}
}
}
另请参阅: