この記事の目次
このページは「JAVAの配列」の演習問題です。「JAVAの配列」の基礎を学びたい方はこちらで参考してください。
JAVAの配列
配列とは、同じ型の複数の値をまとめて一つの変数として扱うことができるデータ構造です。この記事では配列の宣言、初期化、追加などの基本操作、使い方を紹介し、配列に関する演習問題も提供します。
1. 配列の作成
問題:キーボードから配列の要素数を入力して、配列を宣言します。それから配列の各要素に値を入力し、最後にコンソールに配列の全要素を出力します。
ヒント : for文を使用して、配列の各要素に順番にscanner.nextInt
で入力を要求する。package helloworld; import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { int size; // 配列の要素数 Scanner scanner = new Scanner(System.in); System.out.print("配列の要素数を入力 : "); size= scanner.nextInt(); //入力した要素数に応じて、配列を宣言する int[] array = new int[size]; // for文を使用して、各要素に値を入れる for (int i = 0; i < size; i++) { System.out.print("\n配列の" + i + "番目の値: "); array[i] = scanner.nextInt(); // i番目の値を受け取る } // 配列の表示 System.out.print("\n配列のすべての要素: "); for (int i = 0; i < size; i++) { System.out.print(" " + array[i]); } } }
配列の要素数を入力 : 5 配列の0番目の値: 1 配列の1番目の値: 3 配列の2番目の値: 5 配列の3番目の値: 7 配列の4番目の値: 9 配列のすべての要素: 1 3 5 7 9
2. 配列のソート
● Arrays.sortで要素をソート
問題:配列を作成し、その配列をArrays.sort
で昇順と降順に並べ直す。
Arrays.sortで要素をソートについて詳しく見たい方:
Arrays.sortで要素をソート ../../../java/java-array.html?goto=3to3 配列とは、同じ型の複数の値をまとめて一つの変数として扱うことができるデータ構造です。この記事では配列の宣言、初期化、追加などの基本操・・・ |
package helloworld; import java.util.Arrays; import java.util.Collections; public class HelloWorld { public static void main(String[] args) { //配列の宣言、初期化 Integer array[] = {3,4,2,7,5,6,1}; // 元の配列arrayを表示 System.out.print("元のarray配列: "); for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } //age配列を昇順にソートする Arrays.sort(array); // 配列arrayを表示 System.out.print("昇順にしたarray配列: "); for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } //array配列を降順にソートする Arrays.sort(array, Collections.reverseOrder()); // 配列arrayを表示 System.out.print("降順にしたarray配列: "); for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } } }
元のarray配列: 3 4 2 7 5 6 1 昇順にしたarray配列: 1 2 3 4 5 6 7 降順にしたarray配列: 7 6 5 4 3 2 1
● 2重for文で配列ソート
問題:配列を作成し、その配列を2重for文で昇順と降順に並べ直す。(Bubble sort と呼ばれる)
package helloworld; public class HelloWorld { public static void main(String[] args) { //配列の宣言、初期化 int array[] = {3,4,2,7,5,6,1}; int temp; // 元の配列arrayを表示 System.out.print("元のarray配列: "); for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } //配列を昇順にソートする for (int i = 0; i < array.length - 1; i++) { for (int j = i+1; j <= array.length - 1; j++) { if (array[j] < array[i]) { temp = array[i]; array[i] = array[j]; array[j] = temp; } } } // 配列を表示 System.out.print("\n昇順にしたarray配列: "); for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } //配列を降順にソートする for (int i = 0; i < array.length - 1; i++) { for (int j = i+1; j <= array.length - 1; j++) { if (array[j] > array[i]) { temp = array[i]; array[i] = array[j]; array[j] = temp; } } } // 配列を表示 System.out.print("\n降順にしたarray配列: "); for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } } }
元のarray配列: 3 4 2 7 5 6 1 昇順にしたarray配列: 1 2 3 4 5 6 7 降順にしたarray配列: 7 6 5 4 3 2 1
3. 対称配列
問題:int[]型の配列の要素数と各要素をキーボードから入力し、その配列は対称配列か確認する。
ヒント : 対称配列Aとはあるi番目の要素に対して、A[i] = A[n - i - 1]を満たす配列です。例えば、{1,3,6,3,1}は対称配列です。package helloworld; import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { int size,count = 1; // 配列の要素数 Scanner scanner = new Scanner(System.in); System.out.print("配列の要素数を入力 : "); size= scanner.nextInt(); //入力した要素数に応じて、配列を宣言する int[] array = new int[size]; // for文を使用して、各要素に値を入れる for (int i = 0; i < size; i++) { System.out.print("\n配列の" + i + "番目の値: "); array[i] = scanner.nextInt(); // i番目の値を受け取る } for (int i = 0; i < size / 2; i++) { if (array[i] != array[size - i - 1]) { count = 0; break; } } if (count == 0) { System.out.println("判定:対称配列ではありません。"); } else { System.out.println("判定:対称配列です。"); } } }
配列の要素数を入力 : 5 配列の0番目の値: 1 配列の1番目の値: 2 配列の2番目の値: 5 配列の3番目の値: 2 配列の4番目の値: 1 判定:対称配列です。
4. 配列の要素の奇遇を判定
問題:配列変数を宣言し、初期化する。配列の中から、奇数の要素と偶数の要素を数える。
package helloworld; public class HelloWorld { public static void main(String[] args) { int count1 = 0,count2 = 0; // 奇数要素と偶数要素のカウント結果 int[] array = {2,3,5,1,7,4,12,17,23,27,30};//配列の宣言、初期化 for (int i = 0; i < array.length; i++) { if (array[i]%2 == 0) { count1++; }else{ count2++; } } System.out.println("判定:配列の奇数要素:" + count1 + "個。"); System.out.println("判定:配列の奇数要素:" + count2 + "個。"); } }
判定:配列の奇数要素:4個。 判定:配列の奇数要素:7個。
5. 配列の要素を削除する
問題:作成した配列から好きな要素を削除する。
package helloworld; import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { int i, c; Scanner scanner = new Scanner(System.in); // 奇数要素と偶数要素のカウント結果 int[] Array = {1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10};//配列の宣言、初期化 System.out.print("元の配列:"); for (i = 0; i < Array.length; i++) { System.out.print(Array[i] + " "); } System.out.print("\n消した要素の値 : "); int k = scanner.nextInt(); //入力した値に当たる要素を配列から削除する。削除した要素の番目に次の要素を持って来て入れる。 for (c = i = 0; i < Array.length; i++) { if (Array[i] != k) { Array[c] = Array[i]; c++; } } for (i = c; i < Array.length; i++) { Array[i] = 0; } //新しい配列を表示する System.out.print("新配列: "); for (i = 0; i < Array.length; i++) { System.out.print(Array[i] + " "); } } }
元の配列:1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 消した要素の値 : 5 新配列: 1 2 3 4 6 7 8 9 10 1 2 3 4 6 7 8 9 10 0 0
6. 2つの配列に分ける
問題:配列を作成し、奇数と偶数の要素を別々の配列に分け出す。
package helloworld; import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { int n, c=0, d=0; Scanner scanner = new Scanner(System.in); System.out.print("配列の要素数: "); n = scanner.nextInt(); int Array[] = new int[n]; int odd[] = new int[n]; // 偶数の要素を含む配列 int even[] = new int[n]; // 奇数の要素を含む配列 System.out.println("配列の各要素を入力: "); for (int i = 0; i < n; i++) { System.out.print("Array[" + i + "]: "); Array[i] = scanner.nextInt(); } for (int i = 0; i < n; i++) { if (Array[i] % 2 == 0) { even[c] = Array[i]; c++; } else { odd[d] = Array[i]; d++; } } System.out.println("偶数の配列 : "); for (int i = 0; i < c; i++) { System.out.print(even[i] + " "); } System.out.println("\n奇数の配列 : "); for (int i = 0; i < d; i++) { System.out.print(odd[i] + " "); } } }
配列の要素数: 5 配列の各要素を入力: Array[0]: 1 Array[1]: 4 Array[2]: 3 Array[3]: 6 Array[4]: 2 偶数の配列 : 4 6 2 奇数の配列 : 1 3
7. 点数の最高、最低、合計、平均を計算する
問題:科目数と科目の点数をキーボードから入力し、最高点数、最低点数、合計点数、平均点数を計算する。
package helloworld; import java.util.Arrays; import java.util.Scanner; import java.text.DecimalFormat; public class HelloWorld { public static void main(String[] args) { int size,sum = 0; double average; // 配列の要素数 Scanner scanner = new Scanner(System.in); DecimalFormat decimalFormat = new DecimalFormat("#.##"); //小数第二位まで四捨五入する System.out.print("科目数を入力 : "); size= scanner.nextInt(); //入力した要素数に応じて、配列を宣言する int[] array = new int[size]; // for文を使用して、各要素に値を入れる for (int i = 0; i < size; i++) { System.out.print("array[" + i + "]: "); array[i] = scanner.nextInt(); // i番目の値を受け取る } Arrays.sort(array); System.out.println("\n最高点数: " + array[size - 1]); System.out.println("最低点数: " + array[0]); //科目の点数の合計を計算する。 for(int i = 0; i < size; i++){ sum = sum + array[i]; } //科目の点数の平均を計算する average = (double) sum/size; System.out.println("合計点: " + sum); System.out.println("平均点: " + decimalFormat.format(average)); } }
科目数を入力 : 5 array[0]: 7 array[1]: 5 array[2]: 9 array[3]: 8 array[4]: 9 最高点数: 9 最低点数: 5 合計点: 38 平均点: 7.6
8. ランダム要素の配列を作成する
問題:1から10までの乱数を生成して、ランダム要素の配列を作成する。
ヒント :import java.util.Random
をし、Random rnd = new Random()
でインスタンスを作成し、rnd.nextInt(10)
で乱数を作る。package helloworld; import java.util.Random;//乱数を生成するクラス import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { int size; // 配列の要素数 Scanner scanner = new Scanner(System.in); Random rnd = new Random();//インスタンスを作成 System.out.print("配列の要素数を入力:"); size = scanner.nextInt();//配列の要素数をキーボードから要求する int[] Array = new int[size]; for (int i = 0; i< size; i++){ Array[i] = rnd.nextInt(10);//1から10までの乱数を生成し、配列のi番目に代入する } System.out.print("ランダム要素の配列:"); for (int i = 0; i< size; i++){ System.out.print(Array[i] + " "); } } }
配列の要素数を入力:5 ランダム要素の配列:8 7 3 0 5
9. 配列のデータからグラフを作成する
問題:上の課題からランダム要素の配列を作成し、並列の要素値からグラフを作成する。
サンプル結果:
package helloworld; import java.util.Random;//乱数を生成するクラス import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { int size; // 配列の要素数 Scanner scanner = new Scanner(System.in); Random rnd = new Random();//インスタンスを作成 System.out.print("配列の要素数を入力:"); size = scanner.nextInt();//配列の要素数をキーボードから要求する int[] Array = new int[size]; for (int i = 0; i< size; i++){ Array[i] = rnd.nextInt(10);//1から9までの乱数を生成し、配列のi番目に代入する } int maxNumber = Array[0];//配列の要素の最大値 //配列の中で最大値と最小値を求める。 for (int i = 1; i< size; i++){ if(Array[i] > maxNumber) maxNumber = Array[i]; } //「*」からなるグラフを作成する for (int i = maxNumber; i>0 ; i--){ for (int j = 0; j < size;j++){ if (Array[j] >= i){ System.out.print("* "); } else{ System.out.print(" "); } } System.out.println(); } //横軸の値を作成する for(int i = 0 ; i< size ; i++){ System.out.print(Array[i] + " "); } } }
配列の要素数を入力:10 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 4 5 7 9 2 9 1 5 8 4