• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ArrayIndexOutOfBounds例外)

ArrayIndexOutOfBounds例外の原因と解決方法

askaaskaの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.6

実際に発生しているのは t[ra[i]][j];  の場所だったりしない?

madamadadawa
質問者

お礼

askaaska様 ご指摘ありがとうございます。 私もそこのところ怪しいと思いつつ、検証の仕方がわからず、確認できていないという状況です。検証できしだい、またご報告したいと思うのですが、取り急ぎ御礼申しあげます。 そこのところを考えてみようという覚悟をいただきました。ありがとうございます。

関連するQ&A

  • java九九表示

    package kuku; public class Kuku { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ // 配列の宣言をする。 int[][] x = new int[9][9]; // 九九の結果を配列に保存する。 for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { x[i][j] = (i + 1) * (j + 1); } } // 九九の結果を表示する。 for (int i1 = 0; i1 < 9; i1++) { for (int j1 = 0; j1 < 9; j1++) { System.out.print(String.format("x" + args, x)); } // 改行する。 System.out.println(); } } } _________________________________ 九九の表示ができません。 String.formatも使いたいのですが、使い方がわかりません。 String.formatも使って九九を表示させるにはどうしたらいいのか教えてください。 お願いいたします。

  • なんで例外出力されるんですか?

    また恥を忍んで理解の為動かないソースを載せます。 idexの入力値が1だとしてnの入力値が3の話をします このソースを実行させると以下の例外が出力されます java.lang.ArrayIndexOutOfBoundsException この例外の意味は不正なインデックスを使って配列がアクセスされたときに発生する例外と意味です。 ではなんでjava.lang.ArrayIndexOutOfBoundsException出力されるんですか メソッド部分のint[] tmp=new int[a.length-n]; for(int i=idex+n; i<a.length; i++){ tmp[i]=a[i]; } return tmp; } はtmpは配列aの長さ分-nですから配列2番目まで入ることはわかっています で次のカウントアップさせる変数int宣言して i=idex+n;を i<a.length; i++をしていますからidexが1でnが3だったら4で4<6になるんじゃないんですか? import java.util.Scanner; public class Ensyuu725 { /** * @param args */ public static void main(String[] args) { Scanner sc=new Scanner(System.in); int []a=new int[]{1,3,4,7,9,11}; for(int i=0; i<a.length; i++){ System.out.println("配列aの要素は"+"a["+i+"]"+a[i]); } System.out.print("削除する a[idx]:"); int idex=sc.nextInt(); System.out.print("a[idex]から何個削除しますか?"); int n=sc.nextInt(); int k[]=arrayRmvOfn(a,idex,n); for(int i=0; i<k.length; i++){ System.out.println("配列aが消された後の要素は"+"k["+i+"]"+k[i]); } } /** * @param a * @param idex * @param n * @return tmp */ private static int[] arrayRmvOfn(int[] a, int idex, int n) { int[] tmp=new int[a.length-n]; for(int i=idex+n; i<a.length; i++){ tmp[i]=a[i]; } return tmp; } } ご指導お願いします。

    • ベストアンサー
    • Java
  • 例外処理のことで

    class ExceptionTest{ static int array[] = {10,20,30,40,50}; void print(){ for(int i=0;i<10;i++) System.out.println(array[i]); } public static void main(String args[]){ new ExceptionTest().print(); } } /* 対処前 10 20 30 40 50 Exception in theread "main"java.ArrayIndexOutOfBoundsException:5 at ExceptionTest.print(ExceptionTest.java:6) at ExceptionTest.main(ExceptionTest.java:10) という実行結果を 対処後 10 20 30 40 50 例外 例外 例外 例外 例外 */ という出力結果を出したいのですがどうしたらいいのですか? また、 /* 10 20 30 40 50 例外が発生しました */ という出力結果も同様にお願いします。

  • Javaの配列の中身の並び替え

    数独の盤面上に、数字が0から9まであり、その数がそれぞれ何個あるのか数える プログラムを書きました。(0というのは、まだマス目がうまってない状態を指します) 以下のプログラムでは、ある座標に着目し、その座標が関連する行・列・ブロックに 数字が何個あるか数えています。(0のマスの数は特に気にしていません) final int x0 = x / 3 * 3; //000 333 666 final int y0 = y / 3 * 3; //その座標が関連するブロック、行、列に存在する値の数を数える //行 for( int i=0; i<9; ++i ){ countNum[state.getNum(i, y)]++; //state.getNum座標の数字を取得しています。 } //列 for( int i=0; i<9; ++i ){ countNum[state.getNum(x, i)]++; } //ブロック    for(int i=x0;i<3;i++){    for(int j=y0;j<3;j++){     if( i!=x || j!=y){ countNum[state.getNum(i, j)]++;    }    } これで、1の数字の個数や、2の数字の個数を求めることができました。 そして、個数の少ない順に並び替えたいのですが、並び替えてしまうと 何の数字が何個なのかわからなくなってしまいます。 どのようにすれば、数字とその個数がわかったまま並び替えをおこなえますか? 配列を二つ準備するべきなのでしょうか? 順番の入った配列と個数の入った配列。というように。

    • ベストアンサー
    • Java
  • String配列を扱うアルゴリズムについて

    よりパフォーマンスの良いアルゴリズムが、 ございましたらご教示下さい。 数レコード分のDBテーブルデータが格納されたString[][]型が存在するとします。 配列の要素は、String[行(フィールド)][列(カラム)]です。 ここで、全レコード中の列ごとの最大文字列長を int[]型に取得したいと思います。 そうした場合、自作した下記の処理よりも、 よいパフォーマンスを得られるアルゴリズムがございましたら、 ご教示願いたいと思います。 ※処理前提条件 ●String[][]型変数に、過不足無くテーブルデータが格納済みであるとします。 ●配列の第一(行)・第二(列)要素の最大値は取得済みであるとします。 ////////////// // 変数定義 // ////////////// String[][] tableData; ← テーブルデータ格納済み(過不足はありません) int 行数 = 全行数(取得済み); int 列数 = 全列数(取得済み); //列毎の最長文字列値を格納する。 int[] maxLen = new int[列数]; ////////// // 処理 // ////////// //列の個数分、処理を繰り返す for(int i = 0; i < 列数; i++) {   //行の個数分、処理を繰り返す   for(int j = 0; j < 行数; j++) {     //NULLを回避する     if(tableData[i][j] != null) {       //int配列に格納済みの数値より大きければ、改めて格納する       if(maxLen[i] < tableData[i][j].length()) {         maxLen[i] = tableData[i][j].length();       }     }   } } 以上です、どなかお知恵をお貸し頂けませんか。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • 並び替え

    次のプログラムを使い配列:{4, 2, 9, 8, 11}を並べ替え表示するには、mainメソッドをどのように書けばいいのでしょうか。 public class InsertSort { public static void sort(int a[]) { for (int i = 1; i < a.length; i++) { int j, x = a[i]; for (j = i-1; j >= 0 && a[j] > x; j--) a[j + 1] = a[j]; a[j + 1] = x; } } }

  • vectorを使った列の計算について

    への補足 列合計を計算したいのですが、 まったくといってどうすればいいのか思いつきません>< どのようにループすれば列合計を計算、出力できるのでしょうか? import java.util.*; import java.io.*; public class Gyosyukei { public static void main(String args[]) { try{ BufferedReader br = new BufferedReader(new FileReader(args[0])); String str; while((str = br.readLine()) != null){ // 1行を格納するVector Vector vcLine = new Vector(); StringTokenizer st = new StringTokenizer(str,","); for(int i =0;st.hasMoreTokens(); i++){ String token = st.nextToken(); // 行の要素に追加 vcLine.addElement(token); } /* 行合計 */ int gyosum = 0; int num = 0; for(int j =1; j < vcLine.size(); j++){ num = Integer.parseInt((String)vcLine.get(j)); gyosum += num; } System.out.println(gyosum); } } catch(IOException e){ } catch(ArrayIndexOutOfBoundsException ae){ } } }

    • ベストアンサー
    • Java
  • 配列を使った・・・。

    配列を使って簡単な迷路を作っているのですが、なかなかうまくいきません。 0を" "1を"■"を表示させたいのですがうまくいきません。 何処を直せばいいのか教えてください。 public class Sample1 { public static void main (String[]args) { int [][] data = { {1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1}, {1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1}, {1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1}, {1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1}, {1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1}, {1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1}, {1,1,1,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1}, {1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} }; for (int i=0; i<10; i++) { for (int j=0; j<20; j++) { System.out.print(data [i][j]); } if(data [i][j] = 1){ System.out.println("■"); }else{ System.out.println(" "); } } } }

    • ベストアンサー
    • Java
  • JAVAのプログラム 何が悪いか教えてください。(初心者です。)

    public class Hairetsu7 { public static void main(String[] args) { int[][][] b = new int[10][5][3]; int x = 1 ; for(int i = 1; i<= 10 ; i++){ for(int ii = 1; ii<= 5 ; ii++){ for(int iii= 1; iii<= 3 ; iii++){ b[i][ii][iii] = x; System.out.println("b["+i+"]["+ii+"]["+iii+"]の値は"+b[i][ii][iii]+"です。"); x = x + 1;} } } } } 配列の勉強中ですが、ここで詰まってしまい先に進みません。実行すると"[1][1][2]の値は2です"で止まってしまいます。どうしてですか?"[10][5][3]の値は150です"まで表示させたいのですができません。どうすればいいでしょうか? 教えてください。お願いします。    追伸 8行目を次のようにかえると一応できますが、これだと配列に値が入っていないと言われました。System.out.println("b["+i+"]["+ii+"]["+iii+"]の値は"+x+"です。"); x = x + 1; この方法以外でお願いします。  

    • ベストアンサー
    • Java
  • これは試験にでるといわれたのでどなたおしえてもらえませんか

    このソースファイル(Ex2DTest.java)は2次元の参照型配列を用いるプログラムである。3×3の2次元の参照型配列を用いることができるように完成しなさい class SamData{ int x,y,z; void print(){ System.out.println(x+y+z); } } class Ex2DTest{ public static void main (String[] args){ //配列の宣言とインスタンス化   for(int i=0; i<array2d.length;i++){ for(int i=0;i<array2d[i].length;i++){ array2d[i][j].x=i*j; array2d[i][j].y=i+j; array2d[i][j].z=i-j; array2d[i][j].print(); } } } } 分かる方いらっしゃれば是非教えてください! よろしくおねがいします。

    • ベストアンサー
    • Java