Java(2重for文九九表作成)

Java

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

01---------------------------------------------------
02|  X |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |
03---------------------------------------------------
04|  1 |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |
05---------------------------------------------------
06|  2 |  2 |  4 |  6 |  8 | 10 | 12 | 14 | 16 | 18 |
07---------------------------------------------------
08|  3 |  3 |  6 |  9 | 12 | 15 | 18 | 21 | 24 | 27 |
09---------------------------------------------------
10|  4 |  4 |  8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 |
11---------------------------------------------------
12|  5 |  5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
13---------------------------------------------------
14|  6 |  6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 |
15---------------------------------------------------
16|  7 |  7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 |
17---------------------------------------------------
18|  8 |  8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 |
19---------------------------------------------------
20|  9 |  9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 |
21---------------------------------------------------

解)

01public class Ninenine {
02 
03  public static void main(String[] args) {
04    //最大の数(9だと9*9まで計算する)
05    final int MAX=9;
06    //数字部の左側幅(九九だと81なので桁数は2、それに左側の半角スペースをいれて3)となる
07    int width=String.valueOf(MAX*MAX).length()+1;
08    //書式文字列を組み立てる("|%3s "といった文字列を作る)
09    String format="|%"+(width)+"s ";
10    //罫線となっている-----をいくつ並べるかの計算
11    int lineWidth=(width+2)*(MAX+1)+1;
12    //2重ループで描画していく(外のforは行の制御)
13    for(int i=0;i<=MAX;i++){
14      //罫線
15      printLine(lineWidth);
16      //列の制御
17      for(int j=0;j<=MAX;j++){
18        String str;
19        //最初の行か?
20        if(i==0){
21          if(j==0){
22            //最初の要素は'x'
23            str="X"
24          }else{
25            str=String.valueOf(j);
26          }
27        }else{
28          if(j==0){
29            //列の最初はiを出力すればよい
30            str=String.valueOf(i);
31          }else{
32            //実際の計算
33            str=String.valueOf(i*j);
34          }        
35        }
36        //描画
37        System.out.printf(format,str);
38      }
39      //1列描画したら最後に'|'をうった後改行
40      System.out.println("|");
41    }
42    //全部終わったら最後に罫線
43    printLine(lineWidth);
44  }
45  //'-'を引数の分だけ出力して最後に改行するメソッド
46  static void printLine(int width){
47    for(int i=0;i<width;i++){
48      System.out.print("-");
49    }
50    System.out.println();
51  }
52}

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

011からいくつまでの掛け算表を作成しますか(0で終了)>5
02-------------------------------
03|  X |  1 |  2 |  3 |  4 |  5 |
04-------------------------------
05|  1 |  1 |  2 |  3 |  4 |  5 |
06-------------------------------
07|  2 |  2 |  4 |  6 |  8 | 10 |
08-------------------------------
09|  3 |  3 |  6 |  9 | 12 | 15 |
10-------------------------------
11|  4 |  4 |  8 | 12 | 16 | 20 |
12-------------------------------
13|  5 |  5 | 10 | 15 | 20 | 25 |
14-------------------------------
151からいくつまでの掛け算表を作成しますか(0で終了)>10
16-------------------------------------------------------------------
17|   X |   1 |   2 |   3 |   4 |   5 |   6 |   7 |   8 |   9 |  10 |
18-------------------------------------------------------------------
19|   1 |   1 |   2 |   3 |   4 |   5 |   6 |   7 |   8 |   9 |  10 |
20-------------------------------------------------------------------
21|   2 |   2 |   4 |   6 |   8 |  10 |  12 |  14 |  16 |  18 |  20 |
22-------------------------------------------------------------------
23|   3 |   3 |   6 |   9 |  12 |  15 |  18 |  21 |  24 |  27 |  30 |
24-------------------------------------------------------------------
25|   4 |   4 |   8 |  12 |  16 |  20 |  24 |  28 |  32 |  36 |  40 |
26-------------------------------------------------------------------
27|   5 |   5 |  10 |  15 |  20 |  25 |  30 |  35 |  40 |  45 |  50 |
28-------------------------------------------------------------------
29|   6 |   6 |  12 |  18 |  24 |  30 |  36 |  42 |  48 |  54 |  60 |
30-------------------------------------------------------------------
31|   7 |   7 |  14 |  21 |  28 |  35 |  42 |  49 |  56 |  63 |  70 |
32-------------------------------------------------------------------
33|   8 |   8 |  16 |  24 |  32 |  40 |  48 |  56 |  64 |  72 |  80 |
34-------------------------------------------------------------------
35|   9 |   9 |  18 |  27 |  36 |  45 |  54 |  63 |  72 |  81 |  90 |
36-------------------------------------------------------------------
37|  10 |  10 |  20 |  30 |  40 |  50 |  60 |  70 |  80 |  90 | 100 |
38-------------------------------------------------------------------
391からいくつまでの掛け算表を作成しますか(0で終了)>0
40アプリを終了します

解)

01import java.util.Scanner;
02 
03public class Ninenine {
04 
05  public static void main(String[] args) {
06    //Scannerインスタンス作成
07    Scanner scan=new Scanner(System.in); 
08    //回数わからないループはwhile
09    while(true){
10      System.out.print("1からいくつまでの掛け算表を作成しますか(0で終了)>");
11      int max=scan.nextInt();
12      //0で終了
13      if(max <=0){
14        System.out.println("アプリを終了します");
15        scan.close();
16        return;
17      }
18      //メソッド呼び出し
19      createTable(max);
20    }
21  }
22 
23  // '-'を引数の分だけ出力して最後に改行するメソッド
24  static void printLine(int width) {
25    for (int i = 0; i < width; i++) {
26      System.out.print("-");
27    }
28    System.out.println();
29  }
30 
31  static void createTable(int max) {
32 
33    // 数字部の左側幅(九九だと81なので桁数は2、それに左側の半角スペースをいれて3)となる
34    int width = String.valueOf(max * max).length() + 1;
35    // 書式文字列を組み立てる("|%3s "といった文字列を作る)
36    String format = "|%" + (width) + "s ";
37    // 罫線となっている-----をいくつ並べるかの計算
38    int lineWidth = (width + 2) * (max + 1) + 1;
39    // 2重ループで描画していく(外のforは行の制御)
40    for (int i = 0; i <= max; i++) {
41      // 罫線
42      printLine(lineWidth);
43      // 列の制御
44      for (int j = 0; j <= max; j++) {
45        String str;
46        // 最初の行か?
47        if (i == 0) {
48          if (j == 0) {
49            // 最初の要素は'x'
50            str = "X";
51          } else {
52            str = String.valueOf(j);
53          }
54        } else {
55          if (j == 0) {
56            // 列の最初はiを出力すればよい
57            str = String.valueOf(i);
58          } else {
59            // 実際の計算
60            str = String.valueOf(i * j);
61          }
62        }
63        // 描画
64        System.out.printf(format, str);
65      }
66      // 1列描画したら最後に'|'をうった後改行
67      System.out.println("|");
68    }
69    // 全部終わったら最後に罫線
70    printLine(lineWidth);
71  }
72}

コメント

タイトルとURLをコピーしました