配列インデックス範囲外エラー?

このQ&Aのポイント
  • 以下のプログラムを実行する際に、java.lang.ArrayIndexOutOfBoundsExceptionというエラーが発生しました。
  • 詳細を調べたところ、args[0]が配列の範囲外のインデックスを指しているため、エラーが発生していることがわかりました。
  • このエラーの原因について、ご教授いただけますか?
回答を見る
  • ベストアンサー

配列インデックス範囲外エラー?

以下のようなプログラムを実行しようとしたところ、 java.lang.ArrayIndexOutOfBoundsException というエラーが出ました。 args[0]が、配列の範囲外のインデックスを指しているため出ているようなのですが、 原因がよく分かりません。  基本的なことで申し訳ありませんが、ご教授いただけるとありがたいです。 public class test0708_6 { public static void main(String args[]) { // TODO Auto-generated method stub Cell leftmost_cell = null; int leng = args[0].length();   ← java.lang.ArrayIndexOutOfBoundsException for(int i=1; i<=leng; i++) { leftmost_cell = new Cell(args[0].charAt(leng-i), leftmost_cell); } ・・・省略・・・ } }

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

実行時に引数を渡していますか? java test0708_6 hoge などと実行しないと、argsは空の配列になってしまいますよ。 上記の場合はargs[0]に"hoge"が入るようになります。

lopy97
質問者

お礼

ご回答ありがとうございます。そして、お礼が大変遅れてしまい申し訳ありません。 確かに引数を渡していませんでした。 EclipseというJava実行環境を使用していたのですが、その環境を使用した場合のmain関数への引数の渡し方を理解していませんでした。

関連するQ&A

  • arraycopy コンパイルエラー

    javaの勉強をしているのですが arraycopy()を使ったプログラムでエラーが出てしまいます。 class Ex97{ public static void main(String args[]){ int []a = new int[10]; int []b = new int[5]; for(int i=0; i<10; i++){ a[i] = (int)(Math.random()*10); } System.arraycopy(a, 2, b, 0, 5); for(int i=0; 0<a.length-1; i++){ System.out.println(a[i]); } System.out.println(""); for(int i=0; 0<b.length; i++){ System.out.println(b[i]); } } } /*メッセージ Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10 at Ex32.main(Ex32.java:13) */ このプログラムはaの3番目の要素から5つ分の内容をbへコピーする というものです。 ご回答よろしくお願いします。

    • ベストアンサー
    • Java
  • 配列のインデックス番号を返したいが

    インデックス番号を返したい x[0]=1 x[1]=2 x[2]=3 x[3]=3 x[4]=5 の場合で探す(返す)値を3とした場合⇒2,3と値が返るようにしたい import java.util.*; class Test7_23 { static int[] arraySrchIdx(int[] a,int x){ int idx = 0; for(int i=0;i<a.length;i++){ //A if(a[i]==x){ a[i] = i; idx++; } else{ a[i] = 0; } } for(int i=0;i<a.length;i++) //B System.out.println(a[i]); int[] b = new int[idx]; for(int i=0;i<a.length;i++){ if(a[i] != 0) for(int j=0;j<idx;j++) b[j]=a[i]; } for(int i=0;i<idx;i++) System.out.println("b["+i+"]="+b[i]); return b; } public static void main(String[]args){ Scanner std = new Scanner(System.in); System.out.print("配列の要素数は:"); int n = std.nextInt(); int[] x = new int[n]; for(int i=0;i<n;i++){ System.out.print("x["+i+"]="); x[i] = std.nextInt(); } System.out.print("探す値:"); int a = std.nextInt(); int[] b = arraySrchIdx(x,a); for(int i=0;i<b.length;i++){ System.out.println(b[i]); } } }

  • java(エラーメッセージについて)

    こんにちは。 javaの問題を解いているのですが、エラーメッセージを 解決することができません。 下記のプログラムです。 class Ex30{ public static void main(String args[]){ int week[][] ={ {50,70,80}, {80, 90, 100, 50, 70}, {60, 55, 70, 60} }; char n1[] = {'A', 'B', 'C'}; for(int i=0; i<week[i].length; i++){ System.out.print(n1[i] + "さんは" + week[i].length + "科目受講し、各科目の得点が"); for(int k=0; k<week[i].length; k++) System.out.print(week[i][k] + " "); System.out.println(""); } } } 実行結果 Aさんは3科目受講し、各科目の得点が50 70 80 Bさんは5科目受講し、各科目の得点が80 90 100 50 70 Cさんは4科目受講し、各科目の得点が60 55 70 60 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 at Ex30.main(Ex30.java:7) どなたかよろしくお願いします。

    • ベストアンサー
    • Java
  • コンストラクターの生成でエラーが出ます。

    こんにちは、site7(tokopokoからIDを変えました)と言います。 リフレクションを使って、 Double(doulbe)のコンストラクターを呼び出すプログラムを作りました。 しかし、実行するとエラーになります。 原因または解決策をご存知の方はいらっしゃいませんか。 ■プログラム import java.lang.reflect.*; class TestConstructor { public static Class<?> type; public static void main(String[] args) { try { type = Class.forName("java.lang.Double"); Double d = (Double)TestConstructor.createInstance(3.0); System.out.println(d.toString()); } catch (Exception e) { e.printStackTrace(); } } public static Object createInstance(Object... args) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException { Class<?>[] parameterTypes = new Class<?>[args.length]; for (int i = 0; i < args.length; i++) { parameterTypes[i] = args[i].getClass(); } Constructor<?> constructor = type.getConstructor(parameterTypes); //Constructor<?> constructor = type.getConstructor(double.class); return constructor.newInstance(args); } } ■実行例 D:\>javac TestConstructor.java D:\>java TestConstructor java.lang.NoSuchMethodException: java.lang.Double.<init>(java.lang.Double) at java.lang.Class.getConstructor0(Class.java:2706) at java.lang.Class.getConstructor(Class.java:1657) at TestConstructor.createInstance(TestConstructor.java:21) at TestConstructor.main(TestConstructor.java:7) ■私の環境は以下の通りです。 OS: Microsoft Windows XP Professional SP2 java: java version "1.6.0_03"

    • ベストアンサー
    • Java
  • 配列とwhileを使った2重ループを使って書きたい

    今JAVAの勉強をしているのですが、「以下のような画面を表示するコードをint型2次元配列とwhileを使った2重ループを使って書いてください。」 ======================================= a[0][0]:1 a[0][1]:2 a[1][0]:3 a[1][1]:4 ======================================= の問題をやっているのですが実行してみると a[0][0]:1 a[1][1]:4 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at exsercise141.java.Exsercise141Java.main(Exsercise141Java.java:32) Java Result: 1 ビルド成功(合計時間: 0秒) と表示されてしまい、a[0][1]:2とa[1][0]:3が表示されません。 コードは以下のとおりです。 public static void main(String[] args) { // TODO code application logic here int i=0; int j=0;//変数を宣言 int B [] [] = new int [2] [2];//2次元配列を宣言 //======================================== B [0] [0] = 1;// B [0] [1] = 2; //========================================== B [1] [0] = 3; B [1] [1] = 4; //========================================== while(i<=3) { while(j<=3) { System.out.println("a["+i+"]["+j+"]:"+B[i][j]); i++; j++; } } } } どのようにすればa[0][1]:2とa[1][0]:3も表示されますか? ご教授願います。 ちなみにNetBeansを使用しております。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Eclipseのパッケージについて

    デフォルトパッケージ傘下で配列をコピーするという簡単なプログラムを作りました。ちゃんと実行できます。 ですが、デフォルトパッケージではなく新たに自分で作ったパッケージ傘下でそのプログラムを実行すると この行に複数マーカーがあります - ブレークポイント:sample50 - public 型 sample50 はそれ独自のファイル内に定義されなけ ればなりません というエラーが出てしまい、実行できません。 文頭に package ○○○; と書く以外になに変更しないといけないのでしょうか?回答よろしくお願いします。以下コードです。 package atto;           ←attoは自分で作ったパッケージ名です。 public class sample50 {      ←ここのsample50に赤い波線があります。 /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int[] bd=new int[]{1,2,3,4}; for(int v:bd){ if(v!=0)System.out.println(v); } System.out.println("-------"); //copy int[] bd2=new int[bd.length]; for(int i=0;i<bd.length;i++){ bd2[i]=bd[i]; } //copy for(int v:bd2){ if(v!=0){ System.out.println(v); } } } }

    • ベストアンサー
    • Java
  • Javaの配列に関するエラーに関して

    フィールドでstatic Object [][]a= new Object[80][40];と宣言したにも関わらず、以下の様な部分でエラーが発生します。 場所 a[30][k2]=(""+all);【k2は1から31、allはint型】 エラー Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 30 配列の大きさが足りないことによるエラーかと思われますが、フィールドで宣言している大きさは十分であるにも関わらずエラーが出てしまい、困っています。 このような場合、どの様にすればエラーがなくなるのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 配列について

      class Array01{ public static void main(String[] args){ int[][] ia = {{11,12},{21},{41,42,44}}; for(int i = 0; i < ia.length; i++){ for(int j = 0; j < ia[i].length; j++ ){ System.out.print(ia[i][j] + " "); } System.out.println(); } } } } (i < ia.length) と (j < ia[i].length)のとこの意味が分かりません。特にiaとia[i]の違いなんか教えてもらえると助かります。for文については理解してるんですが・・・

    • ベストアンサー
    • Java
  • 質問です。

    コンパイルはできるのですが、実行するとExption in thread"main"java.lang ArrayIndex0ut0fBoundsExcept ion :0 at java1_1.main(java1_1.java:19と表示をされてしまってできません。教えてください。宜しくお願いします。 /* 実行時引数を受け取り乱数を設定 */ class java1-1 { public static void array_syokika(int a[]) { for(int i = 0; i < a.length; i++) { a[i] = (int)(100 * Math.random()); } } public static void main(String args[]) { int num = Integer.parseInt(args[0]); int a[] = new int[num]; array_syokika(a); for(int i = 0; i < a.length; i++) { System.out.println("a[" + i + "]=" + a[i]); } } }

    • ベストアンサー
    • Java
  • CLASSPATHいじったらコンパイルエラー

    今までちゃんと動いていたプログラムが動かなくなりました。 原因が分かりません。どなたか教えてください。 環境------------ WinXP Eclipse Indigo JDK 1.6.0_2 --------------- やったこと 1.環境変数CLASSPATHを設定 2.CLASSPATHを削除 3.Windows再起動 これをやったら今まで動いてたやつが以下のエラーで コンパイルできなくなりました(;;) java.lang.NoClassDefFoundError: Print Caused by: java.lang.ClassNotFoundException: Print at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Exception in thread "main" 不要と思いますがソースもノッケテおきます。 -*-*-*-*-*-*-*-*-*-*- public class Print { public static void main(String[] args) { try{ int n[] = {1,2,3}; for (int i = 0; i < 10; i++){ System.out.println(n[i]); } } catch(ArrayIndexOutOfBoundsException e){ System.out.println("配列の範囲を超えています"); } System.out.println("終了しまーす"); } } -*-*-*-*-*-*-*-*-*-*- よろしくお願いします。

    • ベストアンサー
    • Java