エンジニア成長日記 swaponQ

コンピュータサイエンス専攻の一般人のブログです。

新・明解 Java 入門 演習 4-19, 4-20, 4-21 解答

Hello, Terminal!swaponQです!

前回に引き続き、今回は演習 4-19, 4-20, 4-21 に取り組んでいこうと思います。

  • 演習 4-19

季節を求めるList4-1の月の読み込みにおいて、1~12以外の値が入力された場合は、再入力させるよに修正したプログラムを作成せよ(do文の中にdo文が入る二重ループとなる)。

ex04_19.java

import java.util.Scanner;

class ex04_19 {
	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		int retry;
		do {
			int month;
			do {
				System.out.print("季節を求めます。\n何月ですか:");
				month = stdIn.nextInt();
				if (month >= 3 && month <= 5) {
					System.out.println("それは春です。");
				} else if (month >= 6 && month <= 8) {
					System.out.println("それは夏です。");
				} else if (month >= 9 && month <= 11) {
					System.out.println("それは秋です。");
				} else if (month == 12 || month == 1 || month == 2) {
					System.out.println("それは冬です。");
				}
			} while (month < 1 || month > 12);
			System.out.print("もう一度 1…Yes /0…No:");
			retry = stdIn.nextInt();
		} while (retry == 1);
	}
}

実行結果

季節を求めます。
何月ですか:0
季節を求めます。
何月ですか:12
それは冬です。
もう一度 1…Yes /0…No:0
  • 演習 4-20

n段の正方形を表示するプログラムを作成せよ。右に示すのは、nが3のときの実行結果である。

ex04_20.java

import java.util.Scanner;

class ex04_20 {
	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		int n;
		do {
			System.out.print("nの値:");
			n = stdIn.nextInt();
		} while (n <= 0);
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				System.out.print('*');
				if (j == n) {
					System.out.println();
				} else {
          System.out.print(' ');  //正方形になるようにスペースを調整
        }
			}
		}
	}
}

実行結果

nの値:3
* * *
* * *
* * *
  • 演習 4-21

List4-16は左下側が直角の直角三角形を表示するプログラムであった。直角が左上側、右下側、右上側の三角形を表示するプログラムをそれぞれ作成せよ。

ex04_21_1.java

import java.util.Scanner;

class ex04_21_1 {
	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		int n;
		do {
			System.out.print("左上直角の三角形を表示します。\n段数は:");
			n = stdIn.nextInt();
		} while (n < 1);
		for (int i = 0; i < n; i++) {
			for (int j = (n - i); j > 0; j--) {
				System.out.print('*');
			}
			System.out.println();
		}
	}
}

実行結果

段数は:5
*****
****
***
**
*


ex04_21_2.java

import java.util.Scanner;

class ex04_21_2 {
	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		int n;
		do {
			System.out.print("右下直角の三角形を表示します。\n段数は:");
			n = stdIn.nextInt();
		} while (n < 1);
		for (int i = n; i > 0; i--) {
			for (int j = i; j - 1 > 0; j--) {
				System.out.print(' ');
			}
			for (int k = 0; k <= n-i; k++) {
				System.out.print('*');
			}
			System.out.println();
		}
	}
}

実行結果

段数は:5
    *
   **
  ***
 ****
*****


ex04_21_3.java

import java.util.Scanner;

class ex04_21_3 {
	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		int n;
		do {
			System.out.print("右上直角の三角形を表示します。\n段数は:");
			n = stdIn.nextInt();
		} while (n < 1);
		for (int i = n; i > 0; i--) {
			for (int k = 0; k < n - i; k++) {
				System.out.print(' ');
			}
			for (int j = i; j> 0; j--) {
				System.out.print('*');
			}
			System.out.println();
		}
	}
}

実行結果

段数は:5
*****
 ****
  ***
   **
    *


今回は以上です。お疲れ様でした!
次回は演習 4-22, 4-23, 4-24 です。

Goodbye, Terminal… swaponQでした!