[準備]
utilsパッケージの中にCommonクラスを以下のように作成する。
package utils; public class Common { /** * 配列を逆順にするメソッド * @param arr */ public static void arrReverse(int[] arr) { for (int i = 0; i < arr.length / 2; i++) { int temp = arr[i]; arr[i] = arr[arr.length - 1 - i]; arr[arr.length - 1 - i] = temp; } } /** * 配列を昇順にソート * @param arr */ public static void arrSort(int[] arr) { for(int i=0;i<arr.length-1;i++){ for(int j=i+1;j<arr.length;j++){ if(arr[i] > arr[j]){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } } }
Q1.Commonクラスには配列を昇順にソートするメソッドがあるが、降順にソートするメソッドがない。
arrSortをオーバーロードして第二引数にtrueを入れると降順にソートするメソッドを作成せよ。
public static void arrSort(int[] arr,boolean isDesc){ ~処理を書く }
[解答例]
package utils; public class Common { /** * 配列を逆順にするメソッド * @param arr */ public static void arrReverse(int[] arr) { for (int i = 0; i < arr.length / 2; i++) { int temp = arr[i]; arr[i] = arr[arr.length - 1 - i]; arr[arr.length - 1 - i] = temp; } } /** * 配列を昇順にソート * @param arr */ public static void arrSort(int[] arr) { for(int i=0;i<arr.length-1;i++){ for(int j=i+1;j<arr.length;j++){ if(arr[i] > arr[j]){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } } /** * 配列をソート第2引数trueで降順、falseで昇順 * @param arr * @param isDesc */ public static void arrSort(int[] arr,boolean isDesc){ for(int i=0;i<arr.length-1;i++){ for(int j=i+1;j<arr.length;j++){ if((isDesc && arr[i] < arr[j]) || (!isDesc && arr[i] > arr[j])){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } } }
Q2.Commonクラスを用い、以下の処理を実現せよ。
[実行例]
0~10000の乱数を生成します。いくつ生成しますか?>5
ソートします。並び順を選択してください。1…昇順,2…降順>2
配列を降順にソートしました。表示します。
8131
7836
7616
5970
1400
[解答例]
package javalessons; import java.util.Random; import java.util.Scanner; import utils.Common; public class Q2 { public static void main(String[] args) { System.out.print("0~10000の乱数を生成します。いくつ生成しますか?>"); Scanner scan=new Scanner(System.in); Random rand=new Random(); int num=scan.nextInt(); int[] nums=new int[num]; for(int i=0;i<nums.length;i++){ nums[i]=rand.nextInt(10001); } System.out.print("ソートします。並び順を選択してください。1...昇順,2...降順>"); int select=scan.nextInt(); Common.arrSort(nums,select==2); System.out.println("配列を"+(select==2? "降順":"昇順")+"にソートしました。表示します。"); for(int n:nums){ System.out.println(n); } scan.close(); } }
Q3.配列をシャッフルするメソッドをCommonクラスに作成し、それを利用し以下の処理を実現せよ。
[実行例]
1~9の数字をシャッフルします。
1
5
9
8
3
4
2
6
7
[解答例]
●Common.java
package utils; import java.util.Random; public class Common { /** * 配列を逆順にするメソッド * @param arr */ public static void arrReverse(int[] arr) { for (int i = 0; i < arr.length / 2; i++) { int temp = arr[i]; arr[i] = arr[arr.length - 1 - i]; arr[arr.length - 1 - i] = temp; } } /** * 配列を昇順にソート(BubbleSort) * @param arr */ public static void arrSort(int[] arr) { for(int i=0;i<arr.length-1;i++){ for(int j=i+1;j<arr.length;j++){ if(arr[i] > arr[j]){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } } /** * 配列をソート第2引数trueで降順、falseで昇順 * @param arr * @param isDesc */ public static void arrSort(int[] arr,boolean isDesc){ for(int i=0;i<arr.length-1;i++){ for(int j=i+1;j<arr.length;j++){ if((isDesc && arr[i] < arr[j]) || (!isDesc && arr[i] > arr[j])){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } } /** * 配列をシャッフルするメソッド(Fisher–Yates shuffle) * @param arr */ public static void arrShuffle(int[] arr){ Random rand=new Random(); int n=arr.length; while(n>0){ int index=rand.nextInt(n--); int temp=arr[n]; arr[n]=arr[index]; arr[index]=temp; } } }
●Main.java
import utils.Common; public class Main { public static void main(String[] args) { int[] data={1,2,3,4,5,6,7,8,9}; System.out.println("1~9の数字をシャッフルします。"); Common.arrShuffle(data); for(int n:data){ System.out.println(n); } } }
コメント