新・明解 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でした!