【JAVA】レッスン2-07:配列を理解しよう

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:配列

この記事の練習問題で使用する知識:
基礎構文(レッスン1)比較演算子と論理演算子分岐処理(if文)分岐処理(switch文)繰り返し処理(for文)繰り返し処理(while文)繰り返しの制御配列エラーメッセージ例外処理の基礎

<<前のページ 問題集Top 次のページ>>

JAVAの文法「配列」とは

ここでは配列の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。



プログラミングにおいて、「配列」は複数のデータを一つにまとめて管理するために非常に便利な構造です。

特に同じ型のデータをまとめて扱いたい場合に使用され、データの整理や操作が容易になります。

このページでは配列の基本的な使い方とその利点を学んでいきましょう。

配列とは?

配列とは同じデータ型の要素を連続して格納するためのデータ構造です。

例えば5科目のテストの点数を格納するときに、これまでなら5つの変数を準備していましたが、配列を使えば一つの変数に5つの点数を格納できるようになります。

//テストの点数を変数で保管
int Language = 80;
int Mathematics = 70;
int Science = 100;
int Social = 75;
int English = 60;

//テストの点数を配列で保管
int[] Score = {80, 70, 100, 75, 60};

配列は一つの変数名で複数の要素を管理でき、各要素には「インデックス」と呼ばれる番号を使ってアクセスします。

Javaの配列はサイズが固定されており、一度作成するとそのサイズを変更できません。そのため配列は同じ型のデータを決まった数だけ扱う際に適しています。

配列の宣言と初期化

Javaで配列を使用するためにはまず配列の宣言と初期化を行います。

配列の宣言にはデータ型に続けて [] を使い、変数名を指定します。

次にnew キーワードを使って配列のサイズを指定することで初期化を行います。具体的には以下のように記述します。

// 配列の宣言と初期化(サイズ指定)
int[] scores = new int[ 3];

// 配列の宣言と初期化(値を指定して初期化)
int[] numbers = {10, 20, 30};

上記の例ではscores という名前の配列に3つの整数を格納するためのスペースを確保しています。(空の配列を宣言している)。

またnumbers という配列には初めから値を格納しています。このように直接値を指定して初期化することも可能で、この方法は「初期化リスト」と呼ばれます。

配列の使用例

それでは配列を使って実際にデータを操作する例を見てみましょう。

以下は配列内のデータにアクセスし、合計を計算するプログラムの例です。

public class ArrayExample {
    public static void main(String[] args) {
        // 配列の宣言と初期化
        int[] scores = {85, 90, 78};

        // 合計を計算
        int sum = 0;
        for (int i = 0; i < scores.length; i++) {
            sum += scores[i];
        }

        // 平均を計算して出力
        double average = (double) sum / scores.length;
        System.out.println("合計: " + sum);
        System.out.println("平均: " + average);
    }
}

このプログラムではscores 配列に3つのスコアが格納されており、for ループを使用して合計を計算しています。

その後、合計を要素数で割り平均を求めています。

配列の操作(要素の取得と更新)

配列の要素にアクセスするには、インデックスを指定します。

Javaの配列は0から始まるインデックスを持ちますので、最初の要素にはインデックス0を使用します。

また、特定の要素を変更するにはそのインデックスに新しい値を代入します。

// String型の配列の操作例
String[] names = {"太郎", "次郎", "三郎"};

// 要素の取得
System.out.println(names[ 0]); // 出力: 太郎

// 要素の更新
names[ 2] = "史郎";
System.out.println(names[ 2]); // 出力: 史郎

このように配列のインデックスを利用することで、特定の要素を取得したり更新したりすることができます。

配列を使うメリットと注意点

配列を使うと複数のデータを簡潔に管理でき、コードがシンプルになります。また配列は同じ型のデータを扱うため、型の安全性も確保されます。

しかしJavaの配列はサイズを固定する必要があるため、動的にサイズを変えたい場合には第3章で学習するArrayListなどの別のデータ構造の方が適しています。

また配列の範囲外にアクセスしようとするとArrayIndexOutOfBoundsExceptionが発生するため、インデックスの取り扱いには注意が必要です。

まとめ

配列は同じ型のデータをまとめて管理できる便利なデータ構造であり、プログラム内でのデータ操作を効率化します。

基本的な使い方を理解し、適切な場面で活用することが重要です。

次の章では、エラーメッセージの確認方法について学び、配列使用時に発生しがちなエラーの理解も深めていきます。

JAVA練習問題2-7_配列の平均値を計算しよう

5つの整数(10 , 20 , 30 , 40 , 50)を含む配列を作成し、それらの平均値を計算して出力するプログラムを作成してください。

この問題の要件

以下の要件に従ってプログラムを完成させてください。

  • 配列 numbers10, 20, 30, 40, 50 を格納すること。
  • 配列 numbers の全要素の合計を計算し、その合計を使って平均値を求めること。
  • 平均値は小数点以下も表示すること。

ただし、以下のような実行結果となること。

----- ↓出力される結果の例↓ -----

平均値: 30.0

----- ↑出力される結果の例↑ -----

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1:AverageCalculatorクラスの定義
  □ mainメソッドの定義
  □ □ int型配列numbersの初期化と5つの整数の設定
  □ □ int型変数sumの初期化
  □ □ forループで配列numbersの全要素を順に合計
  □ □ □ sumにnumbersの要素を加算
  □ □ double型変数averageの初期化と平均値の計算
  □ □ System.out.printlnで平均値を出力

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

public class AverageCalculator {
    public static void main(String[] args) {
        /*【穴埋め問題1】
        ここにint型配列numbersを初期化し、5つの整数を設定するコードを書いてください。
        */

        /*【穴埋め問題2】
        ここに合計を格納するためのint型変数sumを初期化するコードを書いてください。
        */

        // 配列の全要素を順に足し合わせる
        /*【穴埋め問題3】
        ここにforループを使用して配列numbersの全要素を合計するコードを書いてください。
        */

        /*【穴埋め問題4】
        ここにdouble型変数averageを初期化し、平均値を計算するコードを書いてください。
        */

        /*【穴埋め問題5】
        ここでSystem.out.println()を使用して、平均値を出力するコードを書いてください。
        */
    }
}

以上がこの問題の穴埋めコードです。

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

解答例

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

********************

public class AverageCalculator {
    public static void main(String[] args) {
        int[] numbers = {10, 20, 30, 40, 50}; // 5つの整数を含む配列を作成
        int sum = 0; // 合計を格納する変数を初期化

        // 配列の全要素を順に足し合わせる
        for (int i = 0; i < numbers.length; i++) {
            sum += numbers[i];
        }

        // 平均値を計算(合計を要素数で割る)
        double average = (double) sum / numbers.length;
        System.out.println("平均値: " + average); // 平均値を出力
    }
}

********************

コードの解説

このプログラムは配列に格納された複数の数値の合計を計算し、それをもとに平均値を求めるJavaプログラムです。

各ブロックでどのような操作をしているか、文法の解説も交えながら見ていきましょう。

クラスとメインメソッドの定義

public class AverageCalculator {
    public static void main(String[] args) {
  • クラス定義 (public class AverageCalculator):プログラム全体を「AverageCalculator」というクラスとして定義します。Javaのコードは、基本的にクラスの中に書かれます。
  • メインメソッド (public static void main(String[] args)):プログラムの実行が始まる場所です。mainメソッドはJavaプログラムのエントリーポイントとなり、必ずこの形式で書かれます。

配列の宣言と初期化

        int[] numbers = {10, 20, 30, 40, 50}; // 5つの整数を含む配列を作成
  • 配列の宣言と初期化int[] numbers = {10, 20, 30, 40, 50}; の部分で、numbersという名前の配列を宣言し、整数値を5つ格納しています。配列は複数のデータを一つの変数で管理するために使われます。intは「整数」を表すデータ型であり、int[]は「整数の配列」を意味します。
  • 配列の初期化{10, 20, 30, 40, 50} で、配列numbersに5つの整数が最初から入っています。

合計を格納する変数の初期化

        int sum = 0; // 合計を格納する変数を初期化

変数の宣言と初期化int sum = 0; によって、合計を保存するための整数型変数sumを宣言し、初期値を0に設定します。

これで配列の各要素を足していく際にsumに合計が蓄積されていきます。

配列の各要素の合計を計算

        for (int i = 0; i < numbers.length; i++) {
            sum += numbers[i];
        }

forループ (for (int i = 0; i < numbers.length; i++)):このループは、iという変数を使って配列の要素に一つずつアクセスし、全ての要素の合計を計算します。

  • numbers.length は配列numbersの要素数を取得し、ループが配列の最後まで繰り返すようにしています。
  • sum += numbers[i];で、配列numbersの各要素をsumに加算します。+=は加算代入演算子で、sum = sum + numbers[i];と同じ意味です。

平均値の計算

        double average = (double) sum / numbers.length;

平均値の計算:この行では、変数averageに合計sumを配列の要素数numbers.lengthで割った結果を格納しています。

結果の出力

        System.out.println("平均値: " + average); // 平均値を出力
    }
}

出力System.out.printlnを使って平均値を出力します。"平均値: " + averageで、「平均値:」という文字列と計算結果のaverageを一緒に表示しています。

まとめ

このプログラムでは配列を使って複数の数値を一度に管理し、合計と平均を計算しました。

配列の使い方やループでの配列要素のアクセス方法など、初心者が身につけておくべき基本的なスキルが盛り込まれています。

配列やループに慣れることでデータ処理の幅が広がりますので、ぜひ理解を深めていきましょう!

<<前のページ 問題集Top 次のページ>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    JAVAテキスト&問題集へ戻る
    トップページへ戻る