我从头开始学习编程,现在我在数组概念。我对多维数组有疑问,疑问是我得到用户输入作为矩阵范围和值,并试图遍历数组,但我得到了一个运行时错误。这是我的程序:
public class Multi {
/**
* @param args
*/
public static void main(String[] args)throws IOException {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int arr[][] = new int[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
arr[i][j] = sc.nextInt();
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
System.out.println(arr[j][i]);
}
System.out.println("n");
}
sc.close();
}
}
输入:第一行包含两个空格分隔的整数
总共N行,
M -列总数。
下一个
N行包含
M个空格分隔的整数。
输出:打印M行,每行包含N个空格分隔的整数
(i got this error).
3 5
13 4 8 14 1
9 6 3 7 21
5 12 17 9 3
线程"main"出现异常95
. lang。ArrayIndexOutOfBoundsException: 3
at hackerearth.Multi.main(Multi.java:24)
输入图片描述
解决方案:(说明如下)
public static void main(String[] args)throws IOException {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int arr[][] = new int[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
arr[i][j] = sc.nextInt();
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
System.out.println(arr[i][j]); //MODIFICATION
}
System.out.println("n");
}
sc.close();
}
第二个循环导致错误:
Exception in thread "main" 13 9 5
java.lang.ArrayIndexOutOfBoundsException: 3
at hackerearth.Multi.main(Multi.java:24)
Your Exception说:已经引起的索引是3。发生这种情况的行是文件Multi.java
中的第24行。这是你的第二个双循环。
您已将i
与j
交换。
你的数组是3x5:
+----+----+----+
| 00 | 01 | 02 |
+----+----+----+
| 10 | 11 | 12 |
+----+----+----+
| 20 | 21 | 22 |
+----+----+----+
| 30 | 31 | 32 |
+----+----+----+
| 40 | 41 | 42 |
+----+----+----+
和你在第24行试图访问的数组将是5x3:
+----+----+----+----+----+
| 00 | 01 | 02 | 03 | 04 |
+----+----+----+----+----+
| 10 | 11 | 12 | 13 | 14 |
+----+----+----+----+----+
| 20 | 31 | 32 | 33 | 34 |
+----+----+----+----+----+
访问03
导致错误,因为它不在第一个数组中。
您正在获得错误,因为在打印语句中您正在访问arr[j][i]
而不是arr[i][j]
。