问题发生在int [][]tam = new int [a][b]
。这只是那条线。我是Java新手,来自C ++背景。
//"Exercitiul" 3
Scanner input = new Scanner(System.in);//instructiune scanner
DataInputStream dis4 = new DataInputStream(System.in);
DataInputStream dis5 = new DataInputStream(System.in);
String st1 = null;
String st2 = null;
try{
System.out.println("Introduceti numarul de Randuri");
st1 = dis4.readLine();
System.out.println("Introduceti numarul de Coloane");
st2 = dis5.readLine();
}
catch (IOException ioe) {
ioe.printStackTrace();
}
int a = Integer.parseInt(st1);
int b = Integer.parseInt(st2);
int [][]tam = new int[a][b];
System.out.println("Verificare " + tam[a][b]);
System.out.println("Introduceti Elementele Matricei ");
for (int m=0 ; m < tam.length ; m++)
for (int n=0 ; n < tam[i].length ; n++){
tam[m][n] = input.nextInt();//instructiune scanner
}
System.out.println("Matricea A: ");
for (int m=0 ; m < tam.length ; m++)
{ System.out.println();
for (int n=0 ; n < tam[i].length ; n++)
System.out.print(tam[m][n]+" ");
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at Program.main(Program.java:95)
答案 0 :(得分:3)
如果数组a
的长度为n
,则元素为a[0]
到a[n-1]
。
在您的情况下,您将tam
分配为int[a][b]
,矩阵的右下角元素为tam[a-1][b-1]
。
此外,我认为您希望m
作为内部循环for (int n=0 ; n < tam[i].length ; n++)
中的索引,而不是i
。
答案 1 :(得分:1)
如果该行抛出异常,则可能意味着a或b为&lt; = 0.检查输入值。
答案 2 :(得分:1)
我认为问题在于
System.out.println("Verificare " + tam[a][b]);
tam初始化为new int[a][b]
。这意味着它的第一个索引从0变为-1,其第二个索引从0变为b - 1.在Java中,数组索引从0开始。所以tam[a][b]
确实超出范围。