Java(メソッド&オーバーロード)

Java

[準備]
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);
		}
	}
}

コメント

タイトルとURLをコピーしました