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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

配列

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

Q&A

解決済

2回答

2596閲覧

ArrayIndexOutOfBoundsExceptionについて

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

配列

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

0グッド

0クリップ

投稿2017/09/08 05:18

編集2017/09/08 05:23

キーボード入力された数字から最大値・最小値・平均値・偏差値を求める、配列を使ったプログラムを作成したいのですが...
コンパイルをなんとかクリアし、最大値・最小値・平均値までは正確に出力されたのですが、偏差値が出力されない代わりにArrayIndexOutOfBoundsExceptionが表示されました。
要素数の上限を1001個にしているにもかかわらず、どうしてこのエラーが出るのか分かりません。

java

1public class StandardScore{ 2 public static void main(String[] args){ 3 Scanner kbd=new Scanner(System.in); 4 int[] data=new int[1000]; 5 int min,max;//(左から)最小値、最大値 6 double ave;//平均値 7 int n=0; 8 System.out.println("数字を入力してください"); 9 10 //最小値・最大値・平均値- - - - - - - - - - - - - - - - - - - - - - 11 12 while(kbd.hasNext()){//hasNext()はリストに要素がなくなるまでtrueを返す 13 data[n]=kbd.nextInt(); 14 n++; 15 } 16 if(n == 0){ 17 System.out.println("データがありません"); 18 }else{ 19 int sum = 0; 20 min = max = data[0]; 21 for(int i = 0; i < n; i++){ 22 if(data[i] < min){ 23 min = data[i]; 24 } 25 if(data[i] > max){ 26 max = data[i]; 27 } 28 sum += data[i]; 29 } 30 ave =1.0*sum/n; 31 System.out.printf("min="+min); 32 System.out.printf("max="+max); 33 System.out.printf("ave="+ave); 34 35 //標準偏差sigma - - - - - - - - - - - - - - - - - - - - - - - - - 36 37 double sigma=0; 38 for(int i=0;i<n;i++){ 39 sigma+=(data[n]-ave)*(data[n]-ave); 40 } 41 sigma/=n; 42 sigma=sqrt(sigma); 43 44 //偏差値hensachi- - - - - - - - - - - - - - - - - - - - - - - - - 45 46 double[] hensachi=new double[n]; 47 48 for(int i=0;i<n; i++){ 49 hensachi[n]=(data[n]-ave)*10/sigma+50; 50 System.out.printf("Standard Score of "+n+" is "+hensachi[n]); 51 } 52 } 53 } 54} 55

※10,20,30,40と入力しました

実行結果
min=10max=40ave=25.0
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at StandardScore.main(StandardScore.java:53)

どなたかエラーの具体的な原因を教えてください。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

このサイトなどにも書いてあるように、配列の宣言時は、[n]のnは要素数を表します。ですから、質問者様のコードですと、1000の要素数になります。

java

1int[] data=new int[1000]; // 要素数1000の配列を初期化している。

上記を踏まえますと、まずは要素数をきちんと合わせてみてはいかがでしょうか?

投稿2017/09/08 05:29

hiramekun

総合スコア428

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

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

退会済みユーザー

退会済みユーザー

2017/09/08 05:44

=new int[4]にして何回か実行してみたのですが出力されませんでした... 下の方の通りに書き換えてみたら実行できました。 丁寧に教えてくださりありがとうございました。
hiramekun

2017/09/08 05:46

いえいえ、見当違いの回答をしていて申し訳ありません。
guest

0

ベストアンサー

Java

1double sigma=0; 2for(int i=0;i<n;i++){ 3 sigma+=(data[n]-ave)*(data[n]-ave); 4} 5sigma/=n; 6sigma=sqrt(sigma);

ではなく、次のようにするべきでは。

Java

1double sigma=0; 2for(int i=0;i<n;i++){ 3 sigma+=(data[i]-ave)*(data[i]-ave); 4} 5sigma/=n; 6sigma=sqrt(sigma);

ArrayIndexOutOfBoundsException... 『配列範囲外例外』みたいな感じです。

投稿2017/09/08 05:25

編集2017/09/08 05:27
LouiS0616

総合スコア35658

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

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

退会済みユーザー

退会済みユーザー

2017/09/08 05:42

for文の中のnを全てiに変えたらちゃんと出力されました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問