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);
}
}


コメント