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

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

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

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

Q&A

解決済

4回答

18543閲覧

java 配列の総和をfor文で表したい。

M.M.O-05

総合スコア15

Java

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

0グッド

0クリップ

投稿2016/07/01 09:49

###前提・実現したいこと
配列を使ったjavaのプログラムです。
点数が40、50、56、60、70、89、92という
ものについてそれぞれの総和、平均点をfor文を
使って求めるというものなのですが、
下のようなプログラムに対し、エラーが生じます。
自分ではうまくいっていると思うのですが、
問題がわかりません。ご協力よろしくお願いします。
java初心者なので詳しく説明して頂けると幸いです。

lang

1public class Average1 { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 int[] score={40,50,56,60,70,89,92}; 8 int sum=0; 9 for(int i=0;i<=score.length;i++){ 10 sum=sum+score[i]; 11 } 12 int average=sum/score.length; 13 System.out.println("7人の合計点は"+sum+"点"); 14 System.out.println("7人の平均点は"+average+"点");

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

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7 at Average1.main(Average1.java:11)

エラーメッセージ

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答4

0

拡張for文を使うと配列のサイズを考えなくていいですよ

  • 修正前

java

1for(int i=0;i<=score.length;i++){ 2 sum=sum+score[i]; 3}
  • 修正後

java

1for(int sc: score){ 2 sum += sc; 3}

見やすく、簡潔になります。
配列の値を操作できないこと、複数の配列を同時に参照できないこと、参照している配列の要素番号を同時に取得できないこと、通常のforよりも認知度が低いこと、他言語では同様に使用できないことがあるなど問題点もあります。

投稿2016/07/01 11:31

intelf___

総合スコア868

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

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

0

質問にあるコードの下に示した行が間違えています。

for(int i=0;i<=score.length;i++){

下のように定義したのですから、配列scoreの要素数(score.length)は7です。
Javaの配列のインデックスは0から始まりますから、score[0]からscore[6]に値が入っています。

int[] score={40,50,56,60,70,89,92};

しかし、for文のiの範囲は、0からscore.lengthまでになっていますから、score[7]がアクセスされます。
そこで、「配列のインデックスの範囲(0~6)を超えてる!」(ArrayIndexOutOfBounds)という例外が起きているのです。

i<=score.length; の部分を i<score.length; に修正すれば直ります。

javaの場合、配列のインデックスの範囲は、0~(length-1)と覚えておきましょう。

投稿2016/07/01 10:02

coco_bauer

総合スコア6915

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

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

0

score[7]まで参照して配列オーバーを起こしていますね。
Javaの配列ではscore.lengthの値が7ということは参照できるのは0番から6番の計7個までなので、
score[7]を参照すると配列オーバーを起こしてエラーが生じてしまいます。
なので、for文の条件文の「i<=score.length」を「i<score.length」に修正しましょう。

投稿2016/07/01 10:01

yoshizaka

総合スコア18

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

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

0

ベストアンサー

ArrayIndexOutOfBoundsExceptionとは配列の要素の数より大きい(または0より小さい)番号までアクセスしたときに起こります。いまのforは「7以下」が条件であるため、0から始まり7を「含んで」ループしています。配列要素が7個しかないなら、0から「6まで」しかアクセスしてはいけません。

投稿2016/07/01 09:54

masaya_ohashi

総合スコア9206

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

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

M.M.O-05

2016/07/01 09:57

ありがとうございます。 等号をとればよかったのですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問