• ベストアンサー

配列について質問です。(訂正版)

学校で以下のような内容のプログラムを組む課題が出されました。 「数を格納した配列の各要素の和を出力せよ。」 一応組むことはできたのですが、引っかかることがあります。 私が組んだのは下のような要素の個数は引数で定義、 各要素は標準入力で読み込むというものです。 import java.io.*; class main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); int n =Integer.parseInt(args[0]); int[] a = new int[n]; for(int i=0;i<n;i++){ a[i] = Integer.parseInt(br.readLine()); } int b=0; for(int i=0;i<n;i++){ b+=a[i]; } System.out.println("sum = "+b); } } ここで質問なのですが、要素数を5個にしたいので 引数で5と入力すると配列a[]はa[0]~a[5]の 計6個できると思うんです。ですから、7行目で int[] a = new int[n-1]; として要素数を5個にしたんですがこれだと5個目の読み込みでエラーになります。 なぜなんでしょうか? 長々とした文章ですみません。。。

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

  • ベストアンサー
  • sktoshi
  • ベストアンサー率50% (2/4)
回答No.3

new int[5] として要素五個の配列を作成した場合、 作成される要素は、[0]~[4] までの「5個」です。 ([5] は作成されません) 同様に、new int[n-1]; とした場合、たとえばnが5だと、 作成される要素は、[0]~[3] までの「4個」ですよ。 もちろん、5個目を読みに行くと、アクセス違反となります。

you-two
質問者

お礼

ご指摘ありがとうございます!! 勘違いしてました・・・ こんな質問するようじゃダメダメですね・・・ 以後、がんばります!!

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

new int[n]; でできるのは、n個です。

you-two
質問者

お礼

はやい解答に感謝します!! ずっと勘違いしてました・・・ ほんとにありがとうございます!!

  • yotta
  • ベストアンサー率32% (26/79)
回答No.1

引数で5と入力すると配列a[]はa[0]~a[4]の計5個しか出来ません a[5]=0; とするとエラーになります

you-two
質問者

お礼

ずっと勘違いしていた自分が恥ずかしいです・・・ 指摘していただいてほんと感謝です!!

関連するQ&A