Java で固定サイズの配列を作成する方法

JavaBeginner
オンラインで実践に進む

はじめに

このチュートリアルでは、Java で固定サイズの配列を作成し使用するための基本的なテクニックを探求します。配列は、同じ型の複数の要素を単一の変数に格納できる基本的なデータ構造です。Java の配列を習得することで、より高度なトピックの基礎となる重要なプログラミングスキルを身につけることができます。

この実験(Lab)では、実践を通して配列の宣言、初期化、操作の方法を学びます。各ステップは前のステップに基づいており、Java での配列操作に関する包括的な理解を提供します。

最初の Java 配列の作成

Java の配列は、同じ型の複数の変数を格納するオブジェクトです。他のデータ構造とは異なり、配列が作成されると、そのサイズを変更することはできません。これにより、配列は、あらかじめ決められた数の要素を格納するのに特に効率的です。

配列の宣言と初期化

配列はさまざまな方法で作成できます。最も一般的な方法を見てみましょう。

簡単な整数配列の作成

まず、プロジェクトディレクトリに新しい Java ファイルを作成しましょう。WebIDE で、[File] メニューをクリックし、[New File] を選択して、ArrayDemo.java という名前を付けます。

次のコードをファイルに追加します。

public class ArrayDemo {
    public static void main(String[] args) {
        // Method 1: Declare and initialize an array separately
        int[] numbers;       // Array declaration
        numbers = new int[5]; // Array initialization with size 5

        // Default values are assigned (all zeros for int array)
        System.out.println("Array elements after initialization:");
        for (int i = 0; i < numbers.length; i++) {
            System.out.println("numbers[" + i + "] = " + numbers[i]);
        }

        System.out.println("\nArray length: " + numbers.length);
    }
}

Java プログラムをコンパイルして実行するには、WebIDE でターミナルを開き(まだ開いていない場合)、次のコマンドを実行します。

javac ArrayDemo.java
java ArrayDemo

次のような出力が表示されるはずです。

Array elements after initialization:
numbers[0] = 0
numbers[1] = 0
numbers[2] = 0
numbers[3] = 0
numbers[4] = 0

Array length: 5

ご覧のように、Java は整数配列内のすべての要素を自動的にゼロに初期化します。

値による配列の初期化

次に、ArrayDemo.java ファイルを変更して、配列を作成する別の方法である、特定の値での初期化を含めます。

public class ArrayDemo {
    public static void main(String[] args) {
        // Method 1: Declare and initialize an array separately
        int[] numbers;       // Array declaration
        numbers = new int[5]; // Array initialization with size 5

        // Default values are assigned (all zeros for int array)
        System.out.println("Array elements after initialization:");
        for (int i = 0; i < numbers.length; i++) {
            System.out.println("numbers[" + i + "] = " + numbers[i]);
        }

        System.out.println("\nArray length: " + numbers.length);

        // Method 2: Initialize with specific values
        int[] scores = {85, 90, 75, 88, 92};

        System.out.println("\nScores array elements:");
        for (int i = 0; i < scores.length; i++) {
            System.out.println("scores[" + i + "] = " + scores[i]);
        }
    }
}

更新されたプログラムをコンパイルして実行します。

javac ArrayDemo.java
java ArrayDemo

これで、追加の出力が表示されるはずです。

Array elements after initialization:
numbers[0] = 0
numbers[1] = 0
numbers[2] = 0
numbers[3] = 0
numbers[4] = 0

Array length: 5

Scores array elements:
scores[0] = 85
scores[1] = 90
scores[2] = 75
scores[3] = 88
scores[4] = 92

さまざまな型の配列の作成

さまざまなデータ型の配列をデモンストレーションするために、ArrayTypes.java という名前の新しいファイルを作成しましょう。WebIDE で、新しいファイルを作成し、次のコードを追加します。

public class ArrayTypes {
    public static void main(String[] args) {
        // String array
        String[] names = new String[3];
        names[0] = "Alice";
        names[1] = "Bob";
        names[2] = "Charlie";

        System.out.println("String array elements:");
        for (int i = 0; i < names.length; i++) {
            System.out.println("names[" + i + "] = " + names[i]);
        }

        // Double array with initialization
        double[] prices = {19.99, 29.99, 15.50, 99.99};

        System.out.println("\nDouble array elements:");
        for (int i = 0; i < prices.length; i++) {
            System.out.println("prices[" + i + "] = " + prices[i]);
        }

        // Boolean array
        boolean[] flags = new boolean[3];
        flags[0] = true;

        System.out.println("\nBoolean array elements:");
        for (int i = 0; i < flags.length; i++) {
            System.out.println("flags[" + i + "] = " + flags[i]);
        }
    }
}

このプログラムをコンパイルして実行します。

javac ArrayTypes.java
java ArrayTypes

次の出力が表示されます。

String array elements:
names[0] = Alice
names[1] = Bob
names[2] = Charlie

Double array elements:
prices[0] = 19.99
prices[1] = 29.99
prices[2] = 15.5
prices[3] = 99.99

Boolean array elements:
flags[0] = true
flags[1] = false
flags[2] = false

さまざまなデータ型には、異なるデフォルト値があることに注意してください。

  • 数値型(int、double など)はデフォルトでゼロになります。
  • Boolean はデフォルトで false になります。
  • 参照型(String、オブジェクト)はデフォルトで null になります。

このステップでは、Java で配列を作成するための基本を説明しました。配列の宣言、値の有無にかかわらず配列の初期化、およびさまざまなデータ型の配列の作成方法を学びました。

配列要素の操作

配列の作成方法がわかったので、配列要素の操作方法を見ていきましょう。これには、値の設定、要素へのアクセス、配列内容の変更が含まれます。

配列要素へのアクセスと変更

WebIDE で、次のコードを使用して ArrayOperations.java という名前の新しいファイルを作成します。

public class ArrayOperations {
    public static void main(String[] args) {
        // Create an integer array
        int[] numbers = new int[5];

        // Assign values to array elements
        numbers[0] = 10;
        numbers[1] = 20;
        numbers[2] = 30;
        numbers[3] = 40;
        numbers[4] = 50;

        // Display the original array
        System.out.println("Original array elements:");
        for (int i = 0; i < numbers.length; i++) {
            System.out.println("numbers[" + i + "] = " + numbers[i]);
        }

        // Access specific elements
        int firstElement = numbers[0];
        int thirdElement = numbers[2];

        System.out.println("\nAccessing specific elements:");
        System.out.println("First element: " + firstElement);
        System.out.println("Third element: " + thirdElement);

        // Modify array elements
        numbers[1] = 25;    // Change second element
        numbers[4] = 55;    // Change last element

        // Display the modified array
        System.out.println("\nArray after modification:");
        for (int i = 0; i < numbers.length; i++) {
            System.out.println("numbers[" + i + "] = " + numbers[i]);
        }
    }
}

このプログラムをコンパイルして実行します。

javac ArrayOperations.java
java ArrayOperations

次のような出力が表示されるはずです。

Original array elements:
numbers[0] = 10
numbers[1] = 20
numbers[2] = 30
numbers[3] = 40
numbers[4] = 50

Accessing specific elements:
First element: 10
Third element: 30

Array after modification:
numbers[0] = 10
numbers[1] = 25
numbers[2] = 30
numbers[3] = 40
numbers[4] = 55

配列の境界と例外処理

配列を操作する際には、配列の境界を理解することが重要です。Java の配列は固定サイズであり、これらの境界外の要素にアクセスしようとすると、例外が発生します。

次のコードを使用して、ArrayBoundaries.java という名前の新しいファイルを作成します。

public class ArrayBoundaries {
    public static void main(String[] args) {
        int[] numbers = new int[3];  // Array with 3 elements (indices 0, 1, 2)

        // Set values within boundaries
        numbers[0] = 10;
        numbers[1] = 20;
        numbers[2] = 30;

        System.out.println("Array elements within boundaries:");
        for (int i = 0; i < numbers.length; i++) {
            System.out.println("numbers[" + i + "] = " + numbers[i]);
        }

        // Demonstrating boundary checking with try-catch
        System.out.println("\nAttempting to access elements outside boundaries:");

        try {
            // This is valid
            System.out.println("Accessing numbers[2]: " + numbers[2]);

            // This will cause an ArrayIndexOutOfBoundsException
            System.out.println("Attempting to access numbers[3]: " + numbers[3]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Error: " + e.getMessage());
            System.out.println("Cannot access an index outside the array bounds (0 to " + (numbers.length-1) + ")");
        }
    }
}

このプログラムをコンパイルして実行します。

javac ArrayBoundaries.java
java ArrayBoundaries

次のような出力が表示されるはずです。

Array elements within boundaries:
numbers[0] = 10
numbers[1] = 20
numbers[2] = 30

Attempting to access elements outside boundaries:
Accessing numbers[2]: 30
Error: Index 3 out of bounds for length 3
Cannot access an index outside the array bounds (0 to 2)

これは、Java が配列に対して境界チェックを実行することを示しています。numbers[3] にアクセスしようとすると、配列にはインデックス 0、1、および 2 の要素しかないため、例外がスローされます。

配列での値の計算と格納

値を計算して配列に格納する実用的な例を作成しましょう。TemperatureConverter.java というファイルを作成します。

public class TemperatureConverter {
    public static void main(String[] args) {
        // Array to store Celsius temperatures
        double[] celsiusTemps = {0, 10, 20, 30, 40};

        // Array to store converted Fahrenheit temperatures
        double[] fahrenheitTemps = new double[celsiusTemps.length];

        // Convert each Celsius temperature to Fahrenheit
        for (int i = 0; i < celsiusTemps.length; i++) {
            // Formula: F = C * 9/5 + 32
            fahrenheitTemps[i] = celsiusTemps[i] * 9/5 + 32;
        }

        // Display the conversion table
        System.out.println("Temperature Conversion Table:");
        System.out.println("---------------------------");
        System.out.println("Celsius    |    Fahrenheit");
        System.out.println("---------------------------");

        for (int i = 0; i < celsiusTemps.length; i++) {
            System.out.printf("%-10.1f |    %-10.1f\n",
                             celsiusTemps[i],
                             fahrenheitTemps[i]);
        }
    }
}

このプログラムをコンパイルして実行します。

javac TemperatureConverter.java
java TemperatureConverter

出力は温度変換テーブルになります。

Temperature Conversion Table:
---------------------------
Celsius    |    Fahrenheit
---------------------------
0.0        |    32.0
10.0       |    50.0
20.0       |    68.0
30.0       |    86.0
40.0       |    104.0

この例は、配列を使用して関連データを格納し、複数の値に対して効率的に計算を実行する方法を示しています。

このステップでは、配列要素へのアクセスと変更、配列の境界の処理、および実用的な計算への配列の使用方法を学びました。これらのスキルは、より複雑な配列操作の基礎となります。

高度な配列操作

配列の基本を理解したところで、配列の反復処理、検索、メソッドでの配列の使用など、より高度な操作を見ていきましょう。

配列の反復処理テクニック

Java には、配列要素を反復処理するための複数の方法が用意されています。次のコードを使用して、ArrayIteration.java という名前の新しいファイルを作成します。

public class ArrayIteration {
    public static void main(String[] args) {
        // Create a sample array
        String[] fruits = {"Apple", "Banana", "Cherry", "Date", "Elderberry"};

        System.out.println("Array Iteration Methods:");

        // Method 1: Standard for loop
        System.out.println("\n1. Using standard for loop:");
        for (int i = 0; i < fruits.length; i++) {
            System.out.println("fruits[" + i + "] = " + fruits[i]);
        }

        // Method 2: Enhanced for loop (foreach)
        System.out.println("\n2. Using enhanced for loop (foreach):");
        for (String fruit : fruits) {
            System.out.println(fruit);
        }

        // Method 3: While loop
        System.out.println("\n3. Using while loop:");
        int index = 0;
        while (index < fruits.length) {
            System.out.println("fruits[" + index + "] = " + fruits[index]);
            index++;
        }
    }
}

このプログラムをコンパイルして実行します。

javac ArrayIteration.java
java ArrayIteration

次のような出力が表示されるはずです。

Array Iteration Methods:

1. Using standard for loop:
fruits[0] = Apple
fruits[1] = Banana
fruits[2] = Cherry
fruits[3] = Date
fruits[4] = Elderberry

2. Using enhanced for loop (foreach):
Apple
Banana
Cherry
Date
Elderberry

3. Using while loop:
fruits[0] = Apple
fruits[1] = Banana
fruits[2] = Cherry
fruits[3] = Date
fruits[4] = Elderberry

各反復処理方法には利点があります。

  • 標準の for ループ:配列のインデックスと要素へのアクセスを提供します
  • 拡張 for ループ:要素のみが必要な場合に、よりクリーンな構文を使用します
  • While ループ:反復条件がより複雑な場合に便利です

配列内の要素の検索

配列内の要素を検索するプログラムを作成しましょう。ArraySearch.java という名前のファイルを作成します。

public class ArraySearch {
    public static void main(String[] args) {
        // Create an array of numbers
        int[] numbers = {10, 25, 33, 47, 52, 68, 79};

        // Values to search for
        int[] searchValues = {33, 50, 79};

        for (int valueToFind : searchValues) {
            boolean found = false;
            int position = -1;

            // Search through the array
            for (int i = 0; i < numbers.length; i++) {
                if (numbers[i] == valueToFind) {
                    found = true;
                    position = i;
                    break;  // Exit the loop once found
                }
            }

            // Display result
            if (found) {
                System.out.println(valueToFind + " found at position " + position);
            } else {
                System.out.println(valueToFind + " not found in the array");
            }
        }
    }
}

このプログラムをコンパイルして実行します。

javac ArraySearch.java
java ArraySearch

次のような出力が表示されるはずです。

33 found at position 2
50 not found in the array
79 found at position 6

これは、ターゲット値が見つかるか、配列が使い果たされるまで、各要素をチェックする基本的な線形検索アルゴリズムを示しています。

メソッドへの配列の受け渡し

配列は、他の変数と同様に、メソッドに渡すことができます。ArrayMethods.java という名前のファイルを作成します。

public class ArrayMethods {
    public static void main(String[] args) {
        // Create an array
        int[] values = {5, 10, 15, 20, 25};

        // Display the original array
        System.out.println("Original array:");
        displayArray(values);

        // Calculate and display the sum
        int sum = calculateSum(values);
        System.out.println("\nSum of all elements: " + sum);

        // Calculate and display the average
        double average = calculateAverage(values);
        System.out.println("Average of all elements: " + average);

        // Double all values in the array
        doubleValues(values);

        // Display the modified array
        System.out.println("\nArray after doubling all values:");
        displayArray(values);
    }

    // Method to display an array
    public static void displayArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

    // Method to calculate the sum of array elements
    public static int calculateSum(int[] arr) {
        int sum = 0;
        for (int value : arr) {
            sum += value;
        }
        return sum;
    }

    // Method to calculate the average of array elements
    public static double calculateAverage(int[] arr) {
        int sum = calculateSum(arr);
        return (double) sum / arr.length;
    }

    // Method to double all values in the array
    public static void doubleValues(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] * 2;
        }
    }
}

このプログラムをコンパイルして実行します。

javac ArrayMethods.java
java ArrayMethods

次のような出力が表示されるはずです。

Original array:
5 10 15 20 25

Sum of all elements: 75
Average of all elements: 15.0

Array after doubling all values:
10 20 30 40 50

この例は、いくつかの重要な概念を示しています。

  1. 配列は、パラメーターとしてメソッドに渡すことができます
  2. メソッドは、配列から計算された値を返すことができます
  3. メソッド内で配列要素に対して行われた変更は、メソッドの外部に反映されます(配列は参照渡しされます)

最大値と最小値の検索

配列内の最大値と最小値を見つけるプログラムを作成しましょう。ArrayMinMax.java という名前のファイルを作成します。

public class ArrayMinMax {
    public static void main(String[] args) {
        // Create an array of numbers
        int[] numbers = {42, 17, 88, 23, 56, 9, 71, 33};

        // Find minimum and maximum values
        int min = findMinimum(numbers);
        int max = findMaximum(numbers);

        // Display the array
        System.out.print("Array values: ");
        for (int num : numbers) {
            System.out.print(num + " ");
        }
        System.out.println();

        // Display results
        System.out.println("Minimum value: " + min);
        System.out.println("Maximum value: " + max);
    }

    // Method to find the minimum value in an array
    public static int findMinimum(int[] arr) {
        // Start with the first element as the minimum
        int min = arr[0];

        // Compare with other elements
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] < min) {
                min = arr[i];
            }
        }

        return min;
    }

    // Method to find the maximum value in an array
    public static int findMaximum(int[] arr) {
        // Start with the first element as the maximum
        int max = arr[0];

        // Compare with other elements
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }

        return max;
    }
}

このプログラムをコンパイルして実行します。

javac ArrayMinMax.java
java ArrayMinMax

次のような出力が表示されるはずです。

Array values: 42 17 88 23 56 9 71 33
Minimum value: 9
Maximum value: 88

このステップでは、さまざまな反復処理テクニック、要素の検索、メソッドへの配列の受け渡し、最大値と最小値の検索など、いくつかの高度な配列操作を学びました。これらのスキルは、Java プログラムで配列をより効果的に操作するのに役立ちます。

実用的な配列の応用

この最終ステップでは、完全な例を通して配列の実用的な応用を探ります。現実世界のプログラミングシナリオで配列をどのように使用できるかを示す、シンプルな成績管理システムを作成します。

学生の成績トラッカーの作成

学生の成績を管理するプログラムを作成しましょう。このプログラムは次のことを行います。

  1. 学生の名前と成績を格納する
  2. 平均成績を計算する
  3. 最高点と最低点を見つける
  4. 平均以上の成績を獲得した学生の数を決定する

WebIDE で、GradeTracker.java という名前の新しいファイルを作成します。

public class GradeTracker {
    public static void main(String[] args) {
        // Arrays to store student information
        String[] studentNames = {"Alice", "Bob", "Charlie", "David", "Emma",
                                "Frank", "Grace", "Hannah", "Ian", "Julia"};

        int[] studentGrades = {85, 92, 78, 65, 88, 72, 95, 83, 79, 91};

        // Display all student records
        System.out.println("Student Grade Records:");
        System.out.println("---------------------");
        System.out.println("Name\t\tGrade");
        System.out.println("---------------------");

        for (int i = 0; i < studentNames.length; i++) {
            // Add extra tab for short names to align columns
            String tab = studentNames[i].length() <= 5 ? "\t\t" : "\t";
            System.out.println(studentNames[i] + tab + studentGrades[i]);
        }

        // Calculate statistics
        int sum = 0;
        int highest = studentGrades[0];
        int lowest = studentGrades[0];
        String highestStudent = studentNames[0];
        String lowestStudent = studentNames[0];

        for (int i = 0; i < studentGrades.length; i++) {
            // Add to sum for average calculation
            sum += studentGrades[i];

            // Check for highest grade
            if (studentGrades[i] > highest) {
                highest = studentGrades[i];
                highestStudent = studentNames[i];
            }

            // Check for lowest grade
            if (studentGrades[i] < lowest) {
                lowest = studentGrades[i];
                lowestStudent = studentNames[i];
            }
        }

        // Calculate average
        double average = (double) sum / studentGrades.length;

        // Count students above average
        int aboveAverageCount = 0;
        for (int grade : studentGrades) {
            if (grade > average) {
                aboveAverageCount++;
            }
        }

        // Display statistics
        System.out.println("\nClass Statistics:");
        System.out.println("----------------");
        System.out.printf("Class Average: %.2f\n", average);
        System.out.println("Highest Grade: " + highest + " (" + highestStudent + ")");
        System.out.println("Lowest Grade: " + lowest + " (" + lowestStudent + ")");
        System.out.println("Number of students above average: " + aboveAverageCount);
    }
}

このプログラムをコンパイルして実行します。

javac GradeTracker.java
java GradeTracker

次のような出力が表示されるはずです。

Student Grade Records:
---------------------
Name		Grade
---------------------
Alice		85
Bob		92
Charlie	78
David		65
Emma		88
Frank		72
Grace		95
Hannah		83
Ian		79
Julia		91

Class Statistics:
----------------
Class Average: 82.80
Highest Grade: 95 (Grace)
Lowest Grade: 65 (David)
Number of students above average: 5

このプログラムは、関連データ(学生の名前と成績)を管理し、そのデータに対して計算を実行するために配列をどのように使用できるかを示しています。

成績カテゴリの追加

次に、成績カテゴリを追加して、成績トラッカーを強化しましょう。EnhancedGradeTracker.java という名前の新しいファイルを作成します。

public class EnhancedGradeTracker {
    public static void main(String[] args) {
        // Arrays to store student information
        String[] studentNames = {"Alice", "Bob", "Charlie", "David", "Emma",
                                "Frank", "Grace", "Hannah", "Ian", "Julia"};

        int[] studentGrades = {85, 92, 78, 65, 88, 72, 95, 83, 79, 91};

        // Create arrays to count grades in each category
        int[] gradeCounts = new int[5]; // A, B, C, D, F

        // Display all student records with grade categories
        System.out.println("Student Grade Records:");
        System.out.println("------------------------------");
        System.out.println("Name\t\tScore\tGrade");
        System.out.println("------------------------------");

        for (int i = 0; i < studentNames.length; i++) {
            // Calculate letter grade
            char letterGrade = calculateGrade(studentGrades[i]);

            // Count grades by category
            switch (letterGrade) {
                case 'A': gradeCounts[0]++; break;
                case 'B': gradeCounts[1]++; break;
                case 'C': gradeCounts[2]++; break;
                case 'D': gradeCounts[3]++; break;
                case 'F': gradeCounts[4]++; break;
            }

            // Add extra tab for short names to align columns
            String tab = studentNames[i].length() <= 5 ? "\t\t" : "\t";
            System.out.println(studentNames[i] + tab + studentGrades[i] + "\t" + letterGrade);
        }

        // Calculate statistics
        double average = calculateAverage(studentGrades);

        // Display statistics
        System.out.println("\nClass Statistics:");
        System.out.println("----------------");
        System.out.printf("Class Average: %.2f\n", average);

        // Display grade distribution
        System.out.println("\nGrade Distribution:");
        System.out.println("------------------");
        System.out.println("A: " + displayStars(gradeCounts[0]));
        System.out.println("B: " + displayStars(gradeCounts[1]));
        System.out.println("C: " + displayStars(gradeCounts[2]));
        System.out.println("D: " + displayStars(gradeCounts[3]));
        System.out.println("F: " + displayStars(gradeCounts[4]));
    }

    // Method to calculate the letter grade from a numeric score
    public static char calculateGrade(int score) {
        if (score >= 90) {
            return 'A';
        } else if (score >= 80) {
            return 'B';
        } else if (score >= 70) {
            return 'C';
        } else if (score >= 60) {
            return 'D';
        } else {
            return 'F';
        }
    }

    // Method to calculate the average of an integer array
    public static double calculateAverage(int[] arr) {
        int sum = 0;
        for (int value : arr) {
            sum += value;
        }
        return (double) sum / arr.length;
    }

    // Method to create a string of stars representing a count
    public static String displayStars(int count) {
        StringBuilder stars = new StringBuilder();
        for (int i = 0; i < count; i++) {
            stars.append("*");
        }
        return stars.toString() + " (" + count + ")";
    }
}

このプログラムをコンパイルして実行します。

javac EnhancedGradeTracker.java
java EnhancedGradeTracker

次のような出力が表示されるはずです。

Student Grade Records:
------------------------------
Name		Score	Grade
------------------------------
Alice		85	B
Bob		92	A
Charlie	78	C
David		65	D
Emma		88	B
Frank		72	C
Grace		95	A
Hannah		83	B
Ian		79	C
Julia		91	A

Class Statistics:
----------------
Class Average: 82.80

Grade Distribution:
------------------
A: *** (3)
B: *** (3)
C: *** (3)
D: * (1)
F:  (0)

この拡張された例は、以下を示しています。

  1. 関連データを格納するために複数の配列を使用する
  2. 計算とフォーマットのためのユーティリティメソッドを作成する
  3. データのカウントと分類
  4. 配列データの視覚的な表現を作成する

条件に基づいて配列データを処理する

最後の例として、条件に基づいて配列データを処理するプログラムを作成しましょう。FilteredGrades.java という名前のファイルを作成します。

public class FilteredGrades {
    public static void main(String[] args) {
        // Arrays to store student information
        String[] studentNames = {"Alice", "Bob", "Charlie", "David", "Emma",
                                "Frank", "Grace", "Hannah", "Ian", "Julia"};

        int[] studentGrades = {85, 92, 78, 65, 88, 72, 95, 83, 79, 91};

        // Create a threshold for passing
        int passingGrade = 75;

        // Display all student records with pass/fail status
        System.out.println("Student Grade Records:");
        System.out.println("------------------------------");
        System.out.println("Name\t\tScore\tStatus");
        System.out.println("------------------------------");

        // Count passing and failing students
        int passingCount = 0;

        for (int i = 0; i < studentNames.length; i++) {
            String status = (studentGrades[i] >= passingGrade) ? "PASS" : "FAIL";

            // Count passing students
            if (studentGrades[i] >= passingGrade) {
                passingCount++;
            }

            // Add extra tab for short names to align columns
            String tab = studentNames[i].length() <= 5 ? "\t\t" : "\t";
            System.out.println(studentNames[i] + tab + studentGrades[i] + "\t" + status);
        }

        // Create arrays to store only passing students
        String[] passingStudents = new String[passingCount];
        int[] passingScores = new int[passingCount];

        // Fill the passing student arrays
        int index = 0;
        for (int i = 0; i < studentNames.length; i++) {
            if (studentGrades[i] >= passingGrade) {
                passingStudents[index] = studentNames[i];
                passingScores[index] = studentGrades[i];
                index++;
            }
        }

        // Display only passing students
        System.out.println("\nPassing Students (Score >= 75):");
        System.out.println("------------------------------");
        System.out.println("Name\t\tScore");
        System.out.println("------------------------------");

        for (int i = 0; i < passingStudents.length; i++) {
            // Add extra tab for short names to align columns
            String tab = passingStudents[i].length() <= 5 ? "\t\t" : "\t";
            System.out.println(passingStudents[i] + tab + passingScores[i]);
        }

        // Calculate and display statistics
        System.out.println("\nClass Statistics:");
        System.out.println("----------------");
        System.out.println("Total Students: " + studentNames.length);
        System.out.println("Passing: " + passingCount);
        System.out.println("Failing: " + (studentNames.length - passingCount));
        System.out.printf("Pass Rate: %.1f%%\n",
                         (double) passingCount / studentNames.length * 100);
    }
}

このプログラムをコンパイルして実行します。

javac FilteredGrades.java
java FilteredGrades

次のような出力が表示されるはずです。

Student Grade Records:
------------------------------
Name		Score	Status
------------------------------
Alice		85	PASS
Bob		92	PASS
Charlie	78	PASS
David		65	FAIL
Emma		88	PASS
Frank		72	FAIL
Grace		95	PASS
Hannah		83	PASS
Ian		79	PASS
Julia		91	PASS

Passing Students (Score >= 75):
------------------------------
Name		Score
------------------------------
Alice		85
Bob		92
Charlie	78
Emma		88
Grace		95
Hannah		83
Ian		79
Julia		91

Class Statistics:
----------------
Total Students: 10
Passing: 8
Failing: 2
Pass Rate: 80.0%

この例は、以下を示しています。

  1. 配列での条件付きロジックの使用
  2. 条件に基づいてフィルタリングされた配列の作成
  3. 配列データからの統計の計算
  4. 情報をフォーマットされた方法で提示する

このステップでは、配列を実用的な問題の解決にどのように適用できるかを見てきました。関連データの管理、計算の実行、および条件に基づいて配列データのフィルタリングされたビューの作成について学びました。これらのスキルは、現実世界の Java アプリケーションで配列を操作するための強力な基盤となります。

まとめ

この実験では、Java で固定サイズの配列を作成し、操作するための基本的なテクニックを探求しました。以下の方法を学びました。

  • さまざまなデータ型の配列を宣言し、初期化する
  • 配列の境界を尊重しながら、配列要素にアクセスし、変更する
  • さまざまなループ処理技術を使用して配列を反復処理する
  • 配列をメソッドに渡し、配列データを処理する
  • 配列内の最大値と最小値を見つける
  • 成績追跡などの実用的な問題に配列を適用する

配列は、Java の多くのデータ構造の基盤を形成し、効率的なデータストレージと操作に不可欠です。この実験で開発したスキルは、動的データ構造、アルゴリズム、オブジェクト指向プログラミングなどのより高度なプログラミング概念の構成要素として役立ちます。

提供された例を変更し、独自の配列ベースのアプリケーションを作成し、java.util.Arrays クラスの追加の配列ユーティリティについて Java ドキュメントを調べることで、配列の練習を続けてください。