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); } }
コメント