JAVA練習問題1-6:配列を使った基本的なリスト操作

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

JAVAの初心者向け問題1-6:配列を使った基本的なリスト操作

この問題を解くために必要な知識:
コメントの書き方、変数と定数、基本データ型とプリミティブ型、四則演算と論理演算、入力と出力、配列、分岐処理(if、if~else、switch)、繰り返し処理(for、while、do~while)

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

JAVA練習問題1-6_配列操作プログラムを作ろう





10個の整数をユーザーが入力し、それらを配列に格納するプログラムを作成しましょう。

その後 特定の数値の検索、表示、および削除を行えるようにします。

この問題の要件

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

  • Scannerクラスを使用して、ユーザーから10個の整数を入力してもらい、配列に格納すること。
  • 配列の内容を表示すること。
  • 配列に特定の数値が含まれているかを確認すること。
  • 指定された数値が配列に含まれている場合、その数値を配列から削除し、更新された配列の内容を表示すること。
  • 指定された数値が配列に含まれていない場合、その旨を表示すること。

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

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

10個の整数を入力してください:
1番目の整数を入力: 10
2番目の整数を入力: 20
3番目の整数を入力: 30
4番目の整数を入力: 40
5番目の整数を入力: 50
6番目の整数を入力: 60
7番目の整数を入力: 70
8番目の整数を入力: 80
9番目の整数を入力: 90
10番目の整数を入力: 100
配列の内容: 10 20 30 40 50 60 70 80 90 100
検索する数値を入力してください: 50
50 は配列に含まれています。削除します。
更新された配列の内容: 10 20 30 40 60 70 80 90 100

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

この問題を解くヒント

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

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

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

1.import文
 1-1. Scannerクラスのインポート

2.ArrayOperationsクラスの定義

3.mainメソッド
 3-1. Scannerオブジェクトの作成
 3-2. 配列の作成
 3-3. ユーザーから10個の整数を入力してもらう
  3-3-1. ユーザーに入力を指示
  3-3-2. ユーザーが入力した数値を配列に格納
 3-4. 配列の内容を表示する
 3-5. 配列に特定の数値が含まれているかを確認する
  3-5-1. ユーザーに検索する数値を入力してもらう
  3-5-2. 配列に特定の数値が含まれているかをチェック
 3-6. 指定された数値が配列に含まれている場合、配列から削除する
  3-6-1. 数値が見つかった場合のメッセージを表示
  3-6-2. 新しい配列を作成し、見つかった数値を除く
  3-6-3. 更新された配列の内容を表示する
 3-7. 指定された数値が配列に含まれていない場合の処理
 3-8. Scannerオブジェクトを閉じる

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

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

import java.util.Scanner;

public class ArrayOperations {
    public static void main(String[] args) {
        // Scannerオブジェクトを作成し、標準入力を読み取る
        Scanner scanner = new Scanner(System.in);
        
        // 配列を作成してユーザーからの入力を格納する
        int[] numbers = new int[10];
        
        // ユーザーから10個の整数を入力してもらう
        System.out.println("10個の整数を入力してください:");

	/*
        ***このコメントを消して、以下の内容のコードを書いてください。***
        for文を使って処理を配列の数だけ処理を繰り返す
            System.out.printを使って(i + 1) + "番目の整数を入力: "を出力
            Scannerを使ってnumbers[i]に数値を格納
	*/
        
        // 配列の内容を表示する
        System.out.print("配列の内容: ");
	/*
	***このコメントを消して、for文を使ってnumbers[i]に格納された数値を全て書き出すコードを書いてください***
	*/
        System.out.println();
        
        // 配列に特定の数値が含まれているかを確認する
        System.out.print("検索する数値を入力してください: ");
        int searchNum = scanner.nextInt();
        
        boolean found = false;
        for (int num : numbers) {
            if (num == searchNum) {
                found = true;
                break;
            }
        }
        
        if (found) {
            System.out.println(searchNum + " は配列に含まれています。削除します。");
            
            // 配列から数値を削除する
            int[] newNumbers = new int[numbers.length - 1];
            int index = 0;
	    /*
	    ***このコメントを消して、以下の内容のコードを書いてください***
	    for文を使ってnumがnumbersに達するまで繰り返し
	        if文を使って、numとsearchNumの数値が違っていればnewNumbers[index]にnumを代入
	        indexに1を足す
	    */

            // 更新された配列の内容を表示する
            System.out.print("更新された配列の内容: ");
            for (int num : newNumbers) {
                System.out.print(num + " ");
            }
            System.out.println();
        } else {
            System.out.println(searchNum + " は配列に含まれていません。");
        }
        
        // スキャナーを閉じてリソースを解放
        scanner.close();
    }
}

 

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

解答例

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

正解コードの例

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

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

import java.util.Scanner;

public class ArrayOperations {
    public static void main(String[] args) {
        // Scannerオブジェクトを作成し、標準入力を読み取る
        Scanner scanner = new Scanner(System.in);
        
        // 配列を作成してユーザーからの入力を格納する
        int[] numbers = new int[10];
        
        // ユーザーから10個の整数を入力してもらう
        System.out.println("10個の整数を入力してください:");
        for (int i = 0; i < numbers.length; i++) {
            System.out.print((i + 1) + "番目の整数を入力: ");
            numbers[i] = scanner.nextInt();
        }
        
        // 配列の内容を表示する
        System.out.print("配列の内容: ");
        for (int num : numbers) {
            System.out.print(num + " ");
        }
        System.out.println();
        
        // 配列に特定の数値が含まれているかを確認する
        System.out.print("検索する数値を入力してください: ");
        int searchNum = scanner.nextInt();
        
        boolean found = false;
        for (int num : numbers) {
            if (num == searchNum) {
                found = true;
                break;
            }
        }
        
        if (found) {
            System.out.println(searchNum + " は配列に含まれています。削除します。");
            
            // 配列から数値を削除する
            int[] newNumbers = new int[numbers.length - 1];
            int index = 0;
            for (int num : numbers) {
                if (num != searchNum) {
                    newNumbers[index] = num;
                    index++;
                }
            }
            
            // 更新された配列の内容を表示する
            System.out.print("更新された配列の内容: ");
            for (int num : newNumbers) {
                System.out.print(num + " ");
            }
            System.out.println();
        } else {
            System.out.println(searchNum + " は配列に含まれていません。");
        }
        
        // スキャナーを閉じてリソースを解放
        scanner.close();
    }
}

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

コードの解説

Scannerオブジェクトの作成

Scanner scanner = new Scanner(System.in);

Scannerクラスは、ユーザーからの入力を読み取るために使用します。

このコードでは、標準入力(キーボードからの入力)を読み取るためにscannerオブジェクトを作成しています。

配列の作成

int[] numbers = new int[10];

int[] numbers = new int[10];は、整数を10個格納できる配列を作成するコードです。配列は固定サイズで、ここでは10個の整数を格納するように設定されています。

ユーザーから10個の整数を入力してもらう

for (int i = 0; i < numbers.length; i++) {
    System.out.print((i + 1) + "番目の整数を入力: ");
    numbers[i] = scanner.nextInt();
}

この部分では、forループを使用してユーザーに10回整数を入力してもらい、その入力を配列numbersに格納します。

scanner.nextInt()は、ユーザーから入力された整数を読み取るメソッドです。

配列の内容を表示する

System.out.print("配列の内容: ");
for (int num : numbers) {
    System.out.print(num + " ");
}
System.out.println();

ここでは、for-eachループを使用して配列numbersの内容を表示します。各要素(整数)を1つずつ出力し、その後に空白で区切って表示します。

配列内に特定の数値が含まれているかを確認

System.out.print("検索する数値を入力してください: ");
int searchNum = scanner.nextInt();

boolean found = false;
for (int num : numbers) {
    if (num == searchNum) {
        found = true;
        break;
    }
}

まず、ユーザーに配列内で検索したい数値を入力してもらいます。次に、for-eachループを使って配列の各要素と検索対象の数値searchNumを比較します。

一致する値が見つかれば、foundフラグをtrueに設定し、ループを終了します(break)。

数値が見つかった場合の処理

if (found) {
    System.out.println(searchNum + " は配列に含まれています。削除します。");
    
    // 配列から数値を削除する
    int[] newNumbers = new int[numbers.length - 1];
    int index = 0;
    for (int num : numbers) {
        if (num != searchNum) {
            newNumbers[index] = num;
            index++;
        }
    }

配列にsearchNumが含まれていた場合、その数値を配列から削除します。

削除後の配列newNumbersは、元の配列numbersよりも1つ少ないサイズで作成されます。

forループ内で、検索対象でない数値をnewNumbersにコピーしていきます。

更新された配列の内容を表示

System.out.print("更新された配列の内容: ");
for (int num : newNumbers) {
    System.out.print(num + " ");
}
System.out.println();

削除後の配列newNumbersを表示します。元の配列から検索した数値が除かれた新しい配列の内容をfor-eachループで表示します。

数値が見つからなかった場合の処理

} else {
    System.out.println(searchNum + " は配列に含まれていません。");
}

もしsearchNumが配列に含まれていない場合、このメッセージが表示されます。何も削除せず、そのままプログラムが進行します。

スキャナーを閉じる

scanner.close();

プログラムが終了する前に、scanner.close()を使ってScannerオブジェクトを閉じ、リソースを解放します。これにより、メモリの無駄遣いを防ぎます。

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

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

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

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






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