[準備]
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);
}
}
}
コメント