ソースコードの間違いを教えて下さい

このQ&Aのポイント
  • 10日で覚えるjava第三版 84-85Pのソースをコンパイルして実行するとException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0と出てきてしまいます。
  • 6行目に問題があるようですが、私は初心者のために下記で調べてみても配列の何が問題なのか良く分かりません。どこをどう直したら動くのでしょうか?
  • また、この本は書いてないことが多いような気がします。他の本で勉強した方が良いでしょうか?
回答を見る
  • ベストアンサー

ソースコードの間違いを教えて下さい

10日で覚えるjava第三版 84-85Pのソースをコンパイルして実行すると Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at lesson09.Lesson09.main(Lesson09.java:6) と出てきてしまいます。 6行目に問題があるようですが、私は初心者のために下記で調べてみても http://www.javaroad.jp/faq/faq_error2.htm#q5 配列の何が問題なのか良く分かりません。 どこをどう直したら動くのでしょうか? また、この本は書いてないことが多いような気がします。 他の本で勉強した方が良いでしょうか? 以下、問題のあったソースコードです public class Lesson09 { public static void main(String[] args) { int x,y; //実行引数の受け取りをint型に変換する x = Integer.parseInt(args[0]); y = Integer.parseInt(args[1]); //Pointオブジェクトの生成する java.awt.Point point = new java.awt.Point(); //座標を設定する point.setLocation(x,y); System.out.println("X, Y座標をフィールドで参照します (int) "); //フィールドで座標を取得する System.out.println("X 座標 : " + point.x); System.out.println("Y 座標 : " + point.y); System.out.println("X, Y座標をgetメソッドで参照します(double)"); //getメソッドで座標を取得する System.out.println("X 座標 : " + point.getX()); System.out.println("Y 座標 : " + point.getY()); } }

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

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

  • ベストアンサー
回答No.2

例えば、 java Lesson09 10 10 など、整数値2個を引数にして、コマンドラインで 実行することを意図したコードです。 引数を指定しないで実行した場合、args の length が 0 となるため、ArrayIndexOutOfBoundsException が発生します。

その他の回答 (1)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

プログラムのソース自体には問題ありません。 プログラムの実行方法に問題があります。 多分このソースの書いてあるページの前後にプログラムの起動時の注意が書いてあると思います。 ……まあ、こういった実行時のミスにどう対処するかが実際のプログラミングの大半なのですが、学習用にそういったコードを外して説明したいポイントをわかりやすくしようとしているんでしょう。

関連するQ&A

  • コンパイル時のエラー。

    いつも大変お世話になりありがとうございます。 初心者向けのJAVAの件。 コンパイルが下記の通りになりました。 どこが間違っているのでしょうか? アドバイスのほど、宜しくお願い申し上げます。 C:\JAVA>javac Lesson09.java C:\JAVA>java Lesson09 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Lesson09.main(Lesson09.java:4) コード public class Lesson09 { public static void main(String[] args) { int x, y; x = Integer.parseInt(args[0]); y = Integer.parseInt(args[1]); java.awt.Point point = new java.awt.Point(); point.setLocation(x, y); System.out.println("X, Y座標をフィールドで参照します(int)"); System.out.println("X 座標:" + point.x); System.out.println("Y 座標:" + point.y); System.out.println("X, Y座標getメソッドで参照します(double)"); System.out.println("X 座標:" + point.getX()); System.out.println("Y 座標:" + point.getY()); } }

    • ベストアンサー
    • Java
  • ソースコードがわからないので教えてください。

    【Java】ソースコードを教えてください。 以下のあ~くの空欄に入るソースコードを教えてください。 解答がなくて困っています。 ・問題 コマンドラインから乱数の最小値,最大値および生成数を入力し、生成した乱数の最大値と最小値および平均を表示するプログラム UseRandomCommand.java を完成させなさい。実行例のように動作すること。 import java.util.Random; public class UseRandomCommand{ public static void main(String[] args){ Random r = new Random(); int max, min; double ave; if( args.length == 3 ){ int n =r.nextInt( あ )+ Integer.parseInt(args[0]); max=min=n; ave=(double)n; for (int i = 1; i < い ); i++){ n = r.nextInt( う )+ Integer.parseInt(args[0]); System.out.println(n); if (max < n) え ; else if (min>n) お ; ave+=(double) か ; } ave/=Double.parseDouble( き ); System.out.println("最大値:"+max); System.out.println("最小値:"+min); System.out.println("平均値:"+ave); } else { System.out.println("引数は3個必要です。"); System.out.println(" く "); } } } 【実行例】(java~~は標準入力) C:\Users\xxxxx\~~~\~~~>java UseRandomCommand 1 50 100 14 1 17 (略) 2 44 50 最大値:50 最小値:1 平均値:24.56 C:\Users\xxxxx\~~~\~~~>java UseRandomCommand 引数は 3 個必要です。 使い方)java UseRandomCommand 乱数の最小値 乱数の最大値 乱数の個数

  • どうして’)’や’;’が足りないの?

    いつも大変お世話になりありがとうございます。 色々と打ち直したりしているのですが、どうしても コンパイルエラーが出ます。 どうすればいいのでしょうか? C:\JAVA>javac Lesson10.java Lesson10.java:11: エラー: ';'がありません Console console = System console(); ^ Lesson10.java:12: エラー: ')'がありません input = Integer.parseInt(console readLine()); ^ Lesson10.java:12: エラー: ';'がありません input = Integer.parseInt(console readLine()); ^ エラー3個 import java.io.Console; public class Lesson10 { public static void main(String[] args) { final int answer = 3; int input; System.out.println("コンピュータが思い浮かべた数字を当ててね!"); System.out.println("「これだ!」と思う数を1~10までで入力しましょう"); Console console = System console(); input = Integer.parseInt(console readLine()); if (input == answer) { System.out.println("お見事、アタリです!"); }else{ System.out.println("残念、ハズレです!"); } } }

    • ベストアンサー
    • Java
  • 理解できません

    まだ、初めて間もないのですが public class DivisionProcess{ (1)public int dead(int x, int y){ (2)int answer = x/y; (3)return answer; } } public class DivisionTest{ public static void main(String args[]){ (4)int x; (5)int y; (6)int answer; try{ x = Integer.parseInt(args[0]); y = Integer.parseInt(args[1]); DivisionProcess dp = newDivisionProcess(); answer = dp.dead(x,y); } catch(NumberFormatException ex) { System.out.println("数値ではありません"); (7)return; のプログラムの中で、(1)(2)(3)(4)(5)(6)(7)のそれぞれの関係が理解できません。 みなさん助けてください。 よろしくお願いします。

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

    class Sample5_7_Integer { /** * Integerクラスのメソッド */ public static void main(String[] args) { //String → int int i1 = Integer.parseInt(args[0]); //int型にすることにより計算可能 System.out.println(i1 + 100); //String → integer Integer i2 = Integer.valueOf(args[0]); System.out.println(i2); Integer i3 = new Integer(100); System.out.println(i2.equals(i3)); } } をEclipseで実行したところ、 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at benkyou.Sample5_7_Integer.main(Sample5_7_Integer.java:10) というエラーになってしまいます。 どなたか解決法をお願いします。

    • ベストアンサー
    • Java
  • intではなくStringで・・・

    こんなソースがあります。。 public class Check { public static void main(String[] args) { int i = Integer.parseInt(args[0]); if (i == 123) { System.out.println("あたり!"); } else if (i < 123) { System.out.println("はずれ!"); } else { System.out.println("おおはずれ!"); } } } これを、int型の文字を入力して判定させるのではなく、String型の文字で判定させたいのですが、 int i = Integer.parseInt(args[0]);をどう変えればいけるでしょうか? よろしくお願いします!

    • ベストアンサー
    • Java
  • javaプログラミングの質問です。

    プログラムで数値の奇遇、合計値、最大値までは出せたのですが平均値の出し方がわかりません。 どこに何を入れればいいかを教えてください。お願いします。 public class pazu{ public static void main(String[] args){ int sum =0,saidai; System.out.println("コマンドラインパラメータは"+args.length+"個です"); for(int i=0;i<args.length;i++){ int x=Integer.parseInt(args[i]); if(pazu.is_even(x)) System.out.println(args[i]+"は偶数です"); else System.out.println(args[i]+"は奇数です"); sum+=x; } saidai=pazu.max(args); System.out.println("合計:"+sum); System.out.println("最大:"+saidai); } static boolean is_even(int number){ return number%2==0; } static int max(String[] number){ int max =0; for(int i=0;i<number.length;i++){ if(max<Integer.parseInt(number[i])){ max=Integer.parseInt(number[i]); } } return max; } }

    • ベストアンサー
    • Java
  • プログラムの平均値の出し方。

    プログラムの平均値の出し方。 public class pazu{ public static void main(String[] args){ int sum =0,saidai; System.out.println("コマンドラインパラメータは"+args.length+"個です"); for(int i=0;i<args.length;i++){ int x=Integer.parseInt(args[i]); if(pazu.is_even(x)) System.out.println(args[i]+"は偶数です"); else System.out.println(args[i]+"は奇数です"); sum+=x; } saidai=pazu.max(args); System.out.println("合計:"+sum); System.out.println("最大:"+saidai); } static boolean is_even(int number){ return number%2==0; } static int max(String[] number){ int max =0; for(int i=0;i<number.length;i++){ if(max<Integer.parseInt(number[i])){ max=Integer.parseInt(number[i]); } } return max; } } このプログラムで数値の奇遇、合計値、最大値までは出せたのですが平均値の出し方がわかりません。 どこに何を入れればいいかを教えてください。お願いします。

  • 書き換え

    以下のソースコード(*を使って二等辺三角形を表示するプログラム)をwhile文のかわりにdo-while文を使って書き換える方法が分かる方ぜひ教えてください。いろいろ試しましたがコンパイルできずに困っています↓ //Triangle2.java class Triangle2{ public static void main(String args[]){ try{ if(args.length !=1){ System.out.println("Please input single positive integer!"); } else if(Integer.parseInt(args[0])>0) { int n = Integer.parseInt(args[0]); int i=0; while(i < n){ int j=0; while (j <= i){ System.out.print("*"); j++; } System.out.println(); i++; } int m=n-1; while(m > 0){ int k=m; while(k > 0){ System.out.print("*"); k --; } System.out.println(); m --; } } else{ System.out.println("Please input single positive integer!"); } }catch(NumberFormatException e){ System.out.println("Please input single positive integer!"); } } }

  • 例外の文法について

    失礼します。 JAVAを始めて約一ヶ月が経とうそしているのですが、表題にある例外の文法「try~catch」のところでご教授願いたいことがあります。 なにぶん初心者なのでテキストを見ながらとりあえずそのまま写して実行して動作確認して・・・という手法をとっていたのですが、下記の例題が実行できずに困っています。 どうしても途中の int number = Integer.parseInt(args[0]); の部分で止まってしまい、解決策が見つからず八方塞りです。 ぜひご教授願いますよう宜しくお願いいたします。 <例題> import java.io.*; public class Ren25 { public static void main(String args[]){ try{ int number = Integer.parseInt(args[0]); System.out.println(number); }catch(NumberFormatException e){ System.out.println("数字じゃないとダメです:"); } } }