1.
2重for文を使って以下の見出し付き九九表を作成せよ。

---------------------------------------------------
|  X |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |
---------------------------------------------------
|  1 |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |
---------------------------------------------------
|  2 |  2 |  4 |  6 |  8 | 10 | 12 | 14 | 16 | 18 |
---------------------------------------------------
|  3 |  3 |  6 |  9 | 12 | 15 | 18 | 21 | 24 | 27 |
---------------------------------------------------
|  4 |  4 |  8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 |
---------------------------------------------------
|  5 |  5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
---------------------------------------------------
|  6 |  6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 |
---------------------------------------------------
|  7 |  7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 |
---------------------------------------------------
|  8 |  8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 |
---------------------------------------------------
|  9 |  9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 |
---------------------------------------------------

解)



public class Ninenine {

	public static void main(String[] args) {
		//最大の数(9だと9*9まで計算する)
		final int MAX=9;
		//数字部の左側幅(九九だと81なので桁数は2、それに左側の半角スペースをいれて3)となる
		int width=String.valueOf(MAX*MAX).length()+1;
		//書式文字列を組み立てる("|%3s "といった文字列を作る)
		String format="|%"+(width)+"s ";
		//罫線となっている-----をいくつ並べるかの計算
		int lineWidth=(width+2)*(MAX+1)+1;
		//2重ループで描画していく(外のforは行の制御)
		for(int i=0;i<=MAX;i++){
			//罫線
			printLine(lineWidth);
			//列の制御
			for(int j=0;j<=MAX;j++){
				String str;
				//最初の行か?
				if(i==0){
					if(j==0){
						//最初の要素は'x'
						str="X";	
					}else{
						str=String.valueOf(j);
					}
				}else{
					if(j==0){
						//列の最初はiを出力すればよい
						str=String.valueOf(i);
					}else{
						//実際の計算
						str=String.valueOf(i*j);
					}					
				}
				//描画
				System.out.printf(format,str);
			}
			//1列描画したら最後に'|'をうった後改行
			System.out.println("|");
		}
		//全部終わったら最後に罫線
		printLine(lineWidth);
	}
	//'-'を引数の分だけ出力して最後に改行するメソッド
	static void printLine(int width){
		for(int i=0;i<width;i++){
			System.out.print("-");
		}
		System.out.println();
	}
}

2.
上で作成したものを変更して以下のようなアプリに仕上げよ
[実行例]

1からいくつまでの掛け算表を作成しますか(0で終了)>5
-------------------------------
|  X |  1 |  2 |  3 |  4 |  5 |
-------------------------------
|  1 |  1 |  2 |  3 |  4 |  5 |
-------------------------------
|  2 |  2 |  4 |  6 |  8 | 10 |
-------------------------------
|  3 |  3 |  6 |  9 | 12 | 15 |
-------------------------------
|  4 |  4 |  8 | 12 | 16 | 20 |
-------------------------------
|  5 |  5 | 10 | 15 | 20 | 25 |
-------------------------------
1からいくつまでの掛け算表を作成しますか(0で終了)>10
-------------------------------------------------------------------
|   X |   1 |   2 |   3 |   4 |   5 |   6 |   7 |   8 |   9 |  10 |
-------------------------------------------------------------------
|   1 |   1 |   2 |   3 |   4 |   5 |   6 |   7 |   8 |   9 |  10 |
-------------------------------------------------------------------
|   2 |   2 |   4 |   6 |   8 |  10 |  12 |  14 |  16 |  18 |  20 |
-------------------------------------------------------------------
|   3 |   3 |   6 |   9 |  12 |  15 |  18 |  21 |  24 |  27 |  30 |
-------------------------------------------------------------------
|   4 |   4 |   8 |  12 |  16 |  20 |  24 |  28 |  32 |  36 |  40 |
-------------------------------------------------------------------
|   5 |   5 |  10 |  15 |  20 |  25 |  30 |  35 |  40 |  45 |  50 |
-------------------------------------------------------------------
|   6 |   6 |  12 |  18 |  24 |  30 |  36 |  42 |  48 |  54 |  60 |
-------------------------------------------------------------------
|   7 |   7 |  14 |  21 |  28 |  35 |  42 |  49 |  56 |  63 |  70 |
-------------------------------------------------------------------
|   8 |   8 |  16 |  24 |  32 |  40 |  48 |  56 |  64 |  72 |  80 |
-------------------------------------------------------------------
|   9 |   9 |  18 |  27 |  36 |  45 |  54 |  63 |  72 |  81 |  90 |
-------------------------------------------------------------------
|  10 |  10 |  20 |  30 |  40 |  50 |  60 |  70 |  80 |  90 | 100 |
-------------------------------------------------------------------
1からいくつまでの掛け算表を作成しますか(0で終了)>0
アプリを終了します

解)

import java.util.Scanner;

public class Ninenine {

	public static void main(String[] args) {
		//Scannerインスタンス作成
		Scanner scan=new Scanner(System.in);	
		//回数わからないループはwhile
		while(true){
			System.out.print("1からいくつまでの掛け算表を作成しますか(0で終了)>");
			int max=scan.nextInt();
			//0で終了
			if(max <=0){
				System.out.println("アプリを終了します");
				scan.close();
				return;
			}
			//メソッド呼び出し
			createTable(max);
		}	
	}

	// '-'を引数の分だけ出力して最後に改行するメソッド
	static void printLine(int width) {
		for (int i = 0; i < width; i++) {
			System.out.print("-");
		}
		System.out.println();
	}

	static void createTable(int max) {

		// 数字部の左側幅(九九だと81なので桁数は2、それに左側の半角スペースをいれて3)となる
		int width = String.valueOf(max * max).length() + 1;
		// 書式文字列を組み立てる("|%3s "といった文字列を作る)
		String format = "|%" + (width) + "s ";
		// 罫線となっている-----をいくつ並べるかの計算
		int lineWidth = (width + 2) * (max + 1) + 1;
		// 2重ループで描画していく(外のforは行の制御)
		for (int i = 0; i <= max; i++) {
			// 罫線
			printLine(lineWidth);
			// 列の制御
			for (int j = 0; j <= max; j++) {
				String str;
				// 最初の行か?
				if (i == 0) {
					if (j == 0) {
						// 最初の要素は'x'
						str = "X";
					} else {
						str = String.valueOf(j);
					}
				} else {
					if (j == 0) {
						// 列の最初はiを出力すればよい
						str = String.valueOf(i);
					} else {
						// 実際の計算
						str = String.valueOf(i * j);
					}
				}
				// 描画
				System.out.printf(format, str);
			}
			// 1列描画したら最後に'|'をうった後改行
			System.out.println("|");
		}
		// 全部終わったら最後に罫線
		printLine(lineWidth);
	}
}