2011-10-23 15 views
0

問題はint [][]tam = new int [a][b]です。その行だけです。私はJavaを初め、C++のバックグラウンドから来ています。ArrayIndexOutofBounds - help?

//"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) 
+1

ここで、i変数はどこから来ますか?それが使用される2つの場所にmがあるべきではありませんか? – MarianP

答えて

3

アレイaの長さがnの場合、要素はa[0]a[n-1]です。 あなたの場合、をint[a][b]と割り当て、マトリックスの右下の要素はtam[a-1][b-1]です。

また、miの代わりに内側ループのインデックスとして使用したいと思います。for (int n=0 ; n < tam[i].length ; n++)

+0

これは私が必要としたものでした –

1

その行が例外をスローした場合、それはおそらくAまたはBのどちらかが= 0 <であることを意味し、あなたの入力値を確認してください。

+0

私は0より大きい入力を与えています –

1

私はこの問題は

System.out.println("Verificare " + tam[a][b]); 

TAMがnew int[a][b]として初期化されているラインではなく、だと思います。これは、最初のインデックスが0からa-1になり、2番目のインデックスが0からb-1になることを意味します。Javaの配列インデックスは0から始まります。したがってtam[a][b]は実際には範囲外です。

+0

同じ行が削除されても同じ事が起こる –

+0

はい、後で他のエラーがあるためです。例外が発生した行は、Vladからの回答のように、エラーがどこにあるかを示します。 –