JAVA練習問題3-1:ArrayListを使おう

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

JAVAの初心者向け問題3-1:ArrayListを使おう

この問題を解くために必要な知識:
【レベル1~2の知識】
コメントの書き方、変数と定数、基本データ型とプリミティブ型、四則演算と論理演算、入力と出力(Scannerクラス)、配列、分岐処理(if、if~else、switch)、繰り返し処理(for、while、do~while)、メソッドの定義と呼び出し、メソッドの戻り値、メソッドのオーバーロード、例外処理(try-catch文、throws、throw)、クラスの定義と使用、インスタンス、コンストラクタ

【レベル3の知識】
コレクションの基礎、コレクション(List, ArrayList)、コレクション(HashSet, TreeSet)コレクション(HashMap, TreeMap)

<<前の問題 問題集Top 次の問題>>

JAVAの文法「ArrayList」とは

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



ArrayListは、Javaでよく使われるデータ構造の1つです。リストのように複数のデータを一つの変数に格納し、サイズを自由に変更できる便利なコレクションです。

本記事では、Javaを勉強し始めた初心者に向けて、ArrayListの基本的な使い方や操作方法をわかりやすく解説します。

ArrayListとは?

ArrayListは、Javaの標準ライブラリで提供されているクラスの一つで、データのリストを扱うためのクラスです。

Array(配列)と似ていますが、Arrayはサイズが固定されているのに対し、ArrayListは必要に応じて要素を追加・削除できるため、柔軟性が高いです。

import java.util.ArrayList; // ArrayListを使用するためのインポート

public class Main {
    public static void main(String[] args) {
        // ArrayListの作成
        ArrayList<String> books = new ArrayList<>();

        // 要素を追加
        books.add("ハリーポッター");
        books.add("ロード・オブ・ザ・リング");
        books.add("ナルニア国物語");

        // 要素を表示
        System.out.println("本のリスト: " + books);

        // 要素を取得
        String firstBook = books.get(0);
        System.out.println("最初の本は: " + firstBook);

        // 要素の削除
        books.remove(1); // 2番目の要素を削除(インデックスは0から始まる)
        System.out.println("削除後のリスト: " + books);

        // リストのサイズを取得
        int size = books.size();
        System.out.println("現在のリストのサイズ: " + size);
    }
}

基本的な操作

1. ArrayListの宣言

ArrayListを使うには、最初にインポートが必要です。以下のコードでArrayListクラスをインポートします。

import java.util.ArrayList;

次に、ArrayListの宣言を行います。以下は、文字列を格納するArrayListの例です。

ArrayList<String> books = new ArrayList<>();

ArrayList<String>は「文字列型のデータを格納するArrayList」を意味します。<>内にデータの型を指定します(この部分をジェネリクスと呼びます)。

要素の追加

ArrayListには、add()メソッドを使って要素を追加します。たとえば、本のタイトルを追加する場合は次のようにします。

books.add("ハリーポッター");
books.add("ロード・オブ・ザ・リング");
books.add("ナルニア国物語");

要素の取得

ArrayListに追加された要素を取得するには、get()メソッドを使います。インデックス番号(0から始まる)を指定して、対応する要素を取得します。

String firstBook = books.get(0); // 最初の本を取得

要素の削除

特定の要素を削除したい場合は、remove()メソッドを使います。インデックスを指定することで、その位置の要素を削除できます。

books.remove(1); // 2番目の要素を削除

リストのサイズを確認

ArrayListのサイズ(要素の数)を確認する場合は、size()メソッドを使います。

int size = books.size(); // 現在のリストのサイズ

ArrayListのポイント

  • 自動的にサイズ調整:ArrayListは要素の追加や削除に応じて自動的にサイズを調整します。これにより、事前にサイズを指定する必要がなく、動的なデータの管理が可能です。
  • ジェネリクス:ArrayListは、扱うデータ型を指定できるため、異なる型のデータが混在することを防ぎます。これにより、コンパイル時に型の安全性が保たれます。




JAVA練習問題3-1_ArrayListを使おう

この問題では整数のArrayListを操作します。

まずユーザーが指定した数字を全てリストに保存し、保存完了後には一覧として表示しましょう。

その後ユーザーが再び数字を指定すると、リストにその数字があるか探し、ある場合はそれをリストから削除しましょう。

この問題の要件

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

  • ユーザーからリストに整数を追加する。
  • ユーザーが0を入力するまで整数の追加を続ける。
  • リストの内容を表示する。
  • ユーザーから検索する数字を入力させ、その数字がリストに含まれているかを確認する。
  • 数字が含まれている場合、その数字をリストから削除し、再度リストの内容を表示する。

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

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

リストに追加する数字を入力してください。0を入力すると終了します。
数字を入力: 5
数字を入力: 10
数字を入力: 15
数字を入力: 0
リストの内容: [5, 10, 15]
検索する数字を入力してください: 10
10 はリストに含まれています。削除します。
更新されたリストの内容: [5, 15]

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

この問題のヒント

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

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

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

1.import文
 1-1. ArrayListクラスのインポート
 1-2. Scannerクラスのインポート
2.ListOperationsクラスの定義
 2-1. mainメソッド
  2-1-1. Scannerオブジェクトを作成し、標準入力を読み取る
  2-1-2. 整数を格納するリストを作成(numbersリスト)
  2-1-3. リストに数字を追加するためのループ(whileループ)
   2-1-3-1. ユーザーに数字の入力を指示
   2-1-3-2. 入力された数字をnum変数に格納
   2-1-3-3. 入力が0であるかをチェックし、0ならループを終了
   2-1-3-4. 入力された数字をリストに追加
  2-1-4. リストの内容を表示
  2-1-5. リストに特定の数字が含まれているかを確認するための入力を受け付ける
   2-1-5-1. 検索する数字を入力
   2-1-5-2. リストにその数字が含まれているかを確認
   2-1-5-3. 含まれていれば数字をリストから削除し、結果を表示
   2-1-5-4. 含まれていなければその旨を表示
  2-1-6. 更新されたリストの内容を表示
  2-1-7. Scannerオブジェクトを閉じてリソースを解放

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

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

import java.util.ArrayList;
import java.util.Scanner;

public class ListOperations {
    public static void main(String[] args) {
        // Scannerオブジェクトを作成し、標準入力を読み取る
        Scanner scanner = new Scanner(System.in);
        
        // 整数を格納するリストを作成
        ArrayList<Integer> numbers = new ArrayList<>();
        
        // リストに数字を追加する
        System.out.println("リストに追加する数字を入力してください。0を入力すると終了します。");
        while (true) {
            System.out.print("数字を入力: ");
            // ***ここにユーザーからの入力を読み取ってnumに格納するコードを書いてください。***
            if (num == 0) {
                break;
            }
            // ***ここにnumをリストに追加するコードを書いてください。***
        }
        
        // リストの内容を表示
        System.out.println("リストの内容: " + numbers);
        
        // リストに特定の数字が含まれているかを確認する
        System.out.print("検索する数字を入力してください: ");
        // ***ここに検索する数字を入力し、それをsearchNumに格納するコードを書いてください。***
        if (numbers.contains(searchNum)) {
            System.out.println(searchNum + " はリストに含まれています。削除します。");
            // ***ここにsearchNumをリストから削除するコードを書いてください。***
        } else {
            System.out.println(searchNum + " はリストに含まれていません。");
        }
        
        // 更新されたリストの内容を表示
        System.out.println("更新されたリストの内容: " + numbers);
        
        // スキャナーを閉じてリソースを解放
        scanner.close();
    }
}

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

解答例

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

正解コードの例

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

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

import java.util.ArrayList;
import java.util.Scanner;

public class ListOperations {
    public static void main(String[] args) {
        // Scannerオブジェクトを作成し、標準入力を読み取る
        Scanner scanner = new Scanner(System.in);
        
        // 整数を格納するリストを作成
        ArrayList<Integer> numbers = new ArrayList<>();
        
        // リストに数字を追加する
        System.out.println("リストに追加する数字を入力してください。0を入力すると終了します。");
        while (true) {
            System.out.print("数字を入力: ");
            int num = scanner.nextInt();
            if (num == 0) {
                break;
            }
            numbers.add(num);
        }
        
        // リストの内容を表示
        System.out.println("リストの内容: " + numbers);
        
        // リストに特定の数字が含まれているかを確認する
        System.out.print("検索する数字を入力してください: ");
        int searchNum = scanner.nextInt();
        if (numbers.contains(searchNum)) {
            System.out.println(searchNum + " はリストに含まれています。削除します。");
            numbers.remove(Integer.valueOf(searchNum));
        } else {
            System.out.println(searchNum + " はリストに含まれていません。");
        }
        
        // 更新されたリストの内容を表示
        System.out.println("更新されたリストの内容: " + numbers);
        
        // スキャナーを閉じてリソースを解放
        scanner.close();
    }
}

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

コードの解説

ScannerオブジェクトとArrayListの作成

Scanner scanner = new Scanner(System.in);
ArrayList<Integer> numbers = new ArrayList<>();
  • Scannerクラス: ユーザーからの入力を取得するために使用されます。System.inを渡すことで、キーボード入力を読み取ります。
  • ArrayList<Integer>: JavaのArrayListは、可変長の配列であり、要素を自由に追加・削除できます。この例では、整数(Integer)型のリストを作成しています。ArrayListは、通常の配列と違って、サイズを動的に変更できる点が特徴です。

リストに要素を追加するループ

System.out.println("リストに追加する数字を入力してください。0を入力すると終了します。");
while (true) {
    System.out.print("数字を入力: ");
    int num = scanner.nextInt();
    if (num == 0) {
        break;
    }
    numbers.add(num);
}
  • whileループ: 無限ループで、ユーザーが0を入力するまで繰り返します。
  • nextInt(): Scannerを使ってユーザーが入力した整数を読み取ります。
  • numbers.add(num): ArrayListadd()メソッドでリストに要素を追加します。ArrayListのサイズは自動で拡張されるため、事前に容量を気にする必要はありません。

リストの内容を表示

System.out.println("リストの内容: " + numbers);

System.out.println(): リストに追加された要素を全て表示します。ArrayListtoString()メソッドを使って自動的に内容を表示します。

特定の要素が含まれているか確認し、削除する

System.out.print("検索する数字を入力してください: ");
int searchNum = scanner.nextInt();
if (numbers.contains(searchNum)) {
    System.out.println(searchNum + " はリストに含まれています。削除します。");
    numbers.remove(Integer.valueOf(searchNum));
} else {
    System.out.println(searchNum + " はリストに含まれていません。");
}
  • contains(): ArrayListcontains()メソッドは、指定した値がリストに含まれているかを確認します。ここでは、ユーザーが入力した数字がリストに存在するかチェックします。
  • remove(): ArrayListremove()メソッドで、リストから特定の要素を削除します。この場合、削除したい要素をInteger.valueOf()でラップし、正しい型の値として扱います。

更新されたリストを表示

System.out.println("更新されたリストの内容: " + numbers);

更新されたリスト: ユーザーが削除操作を行った後のArrayListの内容を表示します。リストは削除された要素を除いた内容が表示されます。

<<前の問題 問題集Top 次の問題>>

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

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

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






    JAVA練習問題集へ戻る
    トップページへ戻る