新・明解 Java 入門 演習 6-9, 6-10, 6-11, 6-12 解答
Hello, Terminal!swaponQです!
今回は演習 6-9, 6-10, 6-11, 6-12 に取り組んでいこうと思います。
- 演習 6-9
要素型がint型である配列を作り、全要素を1〜10の乱数で埋め尽くす(1以上10以下の値を代入する)プログラムを作成せよ。要素数はキーボードから読み込むこと。
import java.util.Random; import java.util.Scanner; class ex06_9 { public static void main(String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in); int n; do { System.out.print("要素数:"); n = stdIn.nextInt(); } while (n < 1); int[] a = new int[n]; for (int i = 0; i < a.length; i++) { int r = rand.nextInt(10) + 1; a[i] = r; System.out.printf("a[%d] = %d\n", i, a[i]); } } }
・実行結果
要素数:10 a[0] = 6 a[1] = 4 a[2] = 10 a[3] = 8 a[4] = 4 a[5] = 8 a[6] = 8 a[7] = 8 a[8] = 6 a[9] = 8
- 演習 6-10
連続する要素が同じ値をもつことのないように6-9のプログラムを改良したプログラムを作成せよ。
import java.util.Random; import java.util.Scanner; class ex06_10 { public static void main(String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in); int n; do { System.out.print("要素数:"); n = stdIn.nextInt(); } while (n < 1 || n > 10); int[] a = new int[n]; int r = 0; for (int i = 0; i < a.length; i++) { if (i == 0) { r = rand.nextInt(10) + 1; a[i] = r; } else if (i > 0) { do { r = rand.nextInt(10) + 1; a[i] = r; } while (a[i] == a[i - 1]); } System.out.printf("a[%d] = %d\n", i, a[i]); } } }
・実行結果
要素数:10 a[0] = 5 a[1] = 2 a[2] = 9 a[3] = 7 a[4] = 8 a[5] = 4 a[6] = 7 a[7] = 1 a[8] = 9 a[9] = 2
- 演習 6-11
異なる要素が同じ値をもつことのないように6-9のプログラムを改良したプログラムを作成せよ。配列の要素数は10以下とする。
import java.util.Random; import java.util.Scanner; class ex06_11 { public static void main(String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in); System.out.print("要素数:"); int n = stdIn.nextInt(); int[] a = new int[n]; int buf = 0; for (int i = 0; i < n; i++) { if (i == 0) { a[i] = rand.nextInt(10) + 1; } else { CHECK: while (true) { buf = rand.nextInt(10) + 1; for (int j = 0; j < i; j++) { if (a[j] == buf) { continue CHECK; } } a[i] = buf; break; } } System.out.printf("a[%d] = %d\n", i, a[i]); } } }
・実行結果
要素数:10 a[0] = 8 a[1] = 2 a[2] = 3 a[3] = 4 a[4] = 10 a[5] = 7 a[6] = 9 a[7] = 5 a[8] = 1 a[9] = 6
- 演習 6-12
配列の要素の並びをシャッフルする(ランダムな順と、なるようにかき混ぜる)プログラムを作成せよ。
import java.util.Random; import java.util.Scanner; class ex06_12 { public static void main(String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in); System.out.print("Number : "); int n = stdIn.nextInt(); String[] s = new String[n]; String[] ans = new String[n]; for (int i = 0; i < n; i++) { if (i == 0){ s[i] = "*"; } else { s[i] = s[i - 1] + "*"; } if (i < 10) { System.out.printf("s[ %d] = %s\n", i, s[i]); } else { System.out.printf("s[%d] = %s\n", i, s[i]); } } System.out.println("---------- shuffle ----------"); int[] a = new int[n]; int buf = 0; for (int i = 0; i < n; i++) { if (i == 0) { a[i] = rand.nextInt(n); } else { CHECK: while (true) { buf = rand.nextInt(n); for (int j = 0; j < i; j++) { if (a[j] == buf) { continue CHECK; } } a[i] = buf; break; } } } for (int i = 0; i < n; i++) { ans[i] = s[a[i]]; } for (int i = 0; i < n; i++) { if (i < 10) { System.out.printf("s[ %d] = %s\n", i, ans[i]); } else { System.out.printf("s[%d] = %s\n", i, ans[i]); } } } }
今回は可視化を目的に'*'で配列の中身を表現した。
・実行結果
Number : 10 s[ 0] = * s[ 1] = ** s[ 2] = *** s[ 3] = **** s[ 4] = ***** s[ 5] = ****** s[ 6] = ******* s[ 7] = ******** s[ 8] = ********* s[ 9] = ********** ---------- shuffle ---------- s[ 0] = ******* s[ 1] = ********** s[ 2] = ***** s[ 3] = ** s[ 4] = * s[ 5] = **** s[ 6] = ********* s[ 7] = ******** s[ 8] = ****** s[ 9] = ***
今回は以上です。お疲れ様でした!
次回は演習 6-13, 6-14, 6-15 です。
Goodbye, Terminal… swaponQでした!