質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
NullPointerException

null値の参照型変数を参照しようとした場合に投げられる、Javaにおける例外のひとつです。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

6874閲覧

ArrayIndexOutOfBoundsExceptionの解決方法を教えてください。

CarpeDiemnosiru

総合スコア4

NullPointerException

null値の参照型変数を参照しようとした場合に投げられる、Javaにおける例外のひとつです。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/07/07 07:55

編集2020/07/08 06:04

前提・実現したいこと

先ほどの質問から引き続き、コマンドライン引数から成績を処理するコードをつくっている途中に以下のエラーメッセージが発生しました。
解決方法を教えてください。お願いします。
ちなみにコマンドライン引数は以下の通りです。
「Anne 100 Glbert 99 Diana 60 Emily 89 Bryce 79 Jane 74 Kilmeny 42 Marigold 64」

発生している問題・エラーメッセージ

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 8 out of bounds for length 8 at hello.Seiseki1.main(Seiseki1.java:14)

該当のソースコード

java

1package hello; 2 3public class Seiseki1 { 4 5 6 public static void main(String[] args) { 7 int i; 8 int total = 0; 9 int n = args.length/2; 10 String names[] = new String[n]; 11 double score[][] = new double[n][2]; 12 13 for(i = 0; i <args.length; i += 2 ) { 14 names[i] = args[i]; 15 score[i][0] = Double.parseDouble(args[i + 1]); 16 total += score[i][0]; 17 } 18 double average = (total/(args.length/2)); 19 double ssum = 0.0; 20 ssum += sqr(score[i][0] - average); 21 double variance = ssum / (args.length/2); 22 double sd = Math.sqrt(variance); 23 double hensachi = 50 + (score[i][0] - average)/sd * 10; 24 25 26 System.out.println("Average = " + average); 27 System.out.println("Standard Deviation = " + sd); 28 29 for(i = 0; i <score.length; i++) { 30 score[i][1] = hensachi; 31 32 33 System.out.print(" " + names[i] + " "); 34 System.out.print(score[i][0] + " "); 35 System.out.println(hensachi); 36 } 37 38 39 } 40 41 42 43 private static double sqr(double d) { 44 return d * d; 45 } 46} 47

試したこと

forの条件式を変えたりしたのですが、うまくいきません。

補足情報

最終的な形は以下の通りにしたいと思っています。

Average = 75.9 Standard Deviation = 18.85 Anne Glbert Diana Emily Bryce Jane Kilmeny Marigold Score 100 99 60 89 79 74 42 64 StdScr 62.8 62.3 41.6 57.0 51.7 49.0 32.0 43.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

at hello.Seiseki1.main(Seiseki1.java:12)

Seiseki1.javaの12行目で例外が発生しているという意味です。

names[i] = args[i];

となっていますが、namesがnullです。

private static String[] names;

ループに入るまえに

names = new String[n] として、String配列を作成してください。

n に入る数値は、いくつになるか、計算できますよね?

同様に、score の方も初期化してください。

score = new double[n][2];


ArrayIndexOutOfBoundsException への対応

配列を初期化してみたのですが、ArrayIndexOutOfBoundsExceptionが同じくnames[i] = args[i];の部分で発生してしまいます(泣)。

ArrayIndexOutOfBoundsExceptionは、配列の要素以上のindexに値を設定しようとしたさいに起こるものです。Exceptionのメッセージを確認してみてください。
nが8の場合、i が 8以上の時に、設定できません。(namesのインデックスは0~7の8個)
i = 0 のときに、names[0]、 i = 2 のときに、names[1]、 ・・・ i = 8 のときに、names[4]
に格納するのではないでしょうか?

投稿2020/07/07 09:00

編集2020/07/08 07:51
momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CarpeDiemnosiru

2020/07/08 06:06

配列を初期化してみたのですが、ArrayIndexOutOfBoundsExceptionが同じくnames[i] = args[i];の部分で発生してしまいます(泣)。
momon-ga

2020/07/08 07:43 編集

ArrayIndexOutOfBoundsExceptionは、配列の要素以上のindexに値を設定しようとしたさいに起こるものです。Exceptionのメッセージを確認してみてください。 nが8の場合、i が 8以上の時に、設定できません。 i = 0 のときに、names[0]、 i = 2 のときに、names[1]、 ・・・ i = 8 のときに、names[4] に格納するのではないでしょうか?
momon-ga

2020/07/08 07:48

あ、質問を変えちゃうと回答が質問と整合性があわなくなるので、別の質問を作成してほしいです。
guest

0

ナカミがnullの変数に対してなにかをしようとするとその例外が出ます
そいつが出た行で使用されている変数の値をチェックして、nullのものをさがしましょう。
そして、それがなぜそうなってるのか、そうならないようにするにはどうすればいいのか、を考えましょう

投稿2020/07/07 08:12

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問