配列の合計を出せ
問題のポイント
配列の中身を全部足して、合計を出力する。
単純な処理に見えるが、ここでfor文
と配列.length
の感覚がズレてるやつは後で必ず詰む。
配列とループの“数え方”をここで身体に刻め。
まず、日本語で考えろ
- 在庫数が格納された配列が渡される(int[] stocks)
- 中身を1つずつ取り出して足していく
- 合計用の変数を用意し、for文で加算する
- 最後に合計値を出力する
コメントを書け
コードを書く前に、やることを日本語で分解してコメントにせよ。
それが“なんとなく”のコードを、“構造”に変える第一歩だ。
// 合計を入れる変数を用意する
// 配列を1つずつループで回す
// 各要素を合計に加える
// 合計を出力する
コメントに従ってコードを書け
ublic static void printStockSum(int[] stocks) {
// 合計を入れる変数を用意する
int sum = 0;
// 配列を1つずつループで回す
for (int i = 0; i < stocks.length; i++) {
// 各要素を合計に加える
sum += stocks[i];
}
// 合計を出力する
System.out.println("合計在庫数: " + sum);
}
コードの解説
int sum = 0;
→ 最初に「箱」を用意する。配列の要素を全部入れていくための変数。
for (int i = 0; i < stocks.length; i++)
→ 配列の全要素をループ。
i = 0 始まり、i < length 終わり は、配列ループの基本形。
sum += stocks[i];
→ 取り出した要素を合計に足す。sum = sum + stocks[i];
と同じ意味。
System.out.println(...)
→ 合計の出力。文字列と数値の連結は+
で書ける。
つまづきやすいポイント
なぜ
i = 0
で始めて、i < stocks.length
で止めるのか?Javaの配列は 0 から始まる。たとえば:
インデックス: 0 1 2 3 4
値: 10 20 30 40 50
- 最初の要素:index 0
- 最後の要素:index 4(= length – 1)
だから
i <= stocks.length
にしてしまうと、index 5 を参照してしまい、配列外参照(ArrayIndexOutOfBoundsException
) が起きる。ループは
< stocks.length
で止める。これがセオリー。
teshのひとこと
「配列って、for文で回すやつっしょ」
…って言ってるやつに限って、i = 1
から書き始めて、<=
で調整してる。
そのズレを放置してる限り、おまえのコードは“構造”を持たない。プログラミングってのは、「世界の数え方」を書く行為だ。
0から始めて、未満で終わる。
それを疑わずに書けるようになるまで、ただひたすら打ち続けろ。Just keep typing, baby.
配列の構造は、おまえの数え方に現れる。他のステップや学習順序を確認したい場合は、
[配列修羅道:全体のステップ構成] をチェックしてくれ。