#問題
以下のように00~99までの数字を並べて表示するプログラムを作成してください。
00 01 02 03 04 05 06 07 08 09
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
この問題を解くためのプログラムを作成しようとしたときに、整数型ではなく文字列といて扱おうと最初考えた。しかし、出力するときには
i0123456789i0123456789i0123456789i0123456789i0123456789i0123456789i0123456789i0123456789i0123456789i0123456789
ように出力された。
#問題点
1,iがそのまま文字列として結合されている点
└iは文字列、jは整数型として出力されているので、最初に考えた文字列として扱うというのは失敗だった。
2,00や01を出力するフォーマットが正しくない
3,改行の処理がない
└各行の出力結果が全て1行にまとまっているので改行するものが抜けていた。
#反省点
・iとjのデータ型の理解不足
└文字列として扱うべきところと、整数として扱うべきところを区別できていない
・内側ループの処理設計不足
└iとjを組み合わせて2桁の数字を生成するロジックを構築できていない。また、ループがどのように動作するかを考えずに設計してしまった。
・改行の処理の考慮
└出力形式に改行が含まれていることを考えなかった。
#アプローチ方法
1,問題を分解する
・2桁の数字を生成する
・10個ずつ出力して改行する
・00~99まで出力を繰り返す
2,必要なロジックを設計する
・外側のループ:10の位(i)を担当するループを作成する(0~9)
・外側のループ:1の位(j)を担当するループを作成する(0~9)
・iとjを2桁の数字として表示するためのフォーマットを使う
3,出力形式を意識する
・各桁10個の数字のあとに改行を入れる
・1行10個ずつ整列させる
4,コードを実装する
class Ex1_10_31 {
public static void main(String[] args) {
// 最終的に表示するString型変数(初期値:""(0文字の文字列))
String display = "";
// 外側のfor文は行を表す
for (int i = 0; i < 10; i++) {
// 内側のfor文は列を表す
for (int j = 0; j < 10; j++) {
// 2桁の形式で数字を追加
display += String.format("%02d ", i * 10 + j);
}
// 1行ごとに改行を追加
display += "\n";
}
// すべての数字を表示
System.out.println(display);
}
}
#String.formatの使用例
1,数値や文字列のフォーマット
2,整列された表の作成
3,日付や時間のフォーマット
4,ログやデバッグメッセージの作成
5,ユニットテストの補助
6,国や文化に合わせたローカライズ