九九の段を作る
i を並べると、3 の段も 7 の段も同じ答えになる
ここまでの for では、i は「何周目か」を数えるだけの存在でした。ですが i はただの int 変数なので、そのまま計算に使えます。この一歩を踏み出すと、for で書ける処理の幅が一気に広がります。
たとえば 1 から 5 までの平方数を並べるなら、i を 2 回掛けるだけです。
Java
for (int i = 1; i <= 5; i++) {
System.out.println(i * i);
}
// 1 4 9 16 25回っているのは i ですが、画面に出ているのは i * i です。回数を数える値 と 並べたい値 は別物で、後者は前者から計算して作ります。
Java
int value = n * i; // 並べたいのはこちらここを混同して i そのものを並べてしまうと、引数を変えても出力が変わらないという、とても分かりやすい症状が出ます。
回る回数は引数で変わらない
九九の段は、どの段でも 9 個です。3 の段なら 3 から 27 まで、7 の段なら 7 から 63 までですが、値の個数は変わりません。
つまり、ループの条件に n は出てきません。i を 1 から 9 まで動かすのは固定で、引数の n は掛け算の側にだけ現れます。
i | 1 | 2 | 3 | ... | 9 |
|---|---|---|---|---|---|
n が 3 | 3 | 6 | 9 | ... | 27 |
n が 7 | 7 | 14 | 21 | ... | 63 |
i を 0 から始めると先頭に 0 が入り、i <= 9 を i < 9 にすると最後の 1 個が消えます。並べたい個数は 9 個です。書いたら数えてください。
空白は「間」にだけ入る
値が 9 個あるとき、区切りの半角スペースは 8 か所です。9 か所ではありません。ここを取り違えると "3 6 9 12 15 18 21 24 27 " のように末尾に 1 つ余り、見た目では気づけないままテストだけが落ちます。
Java
String result = "";
result = result + 3; // "3"
result = result + " " + 6; // "3 6"+ は左右のどちらかが文字列なら「つなぐ」働きに変わるので、int の計算結果をそのまま渡せます。あとは、9 回のうち何回スペースを足すのかを決めるだけです。
半角スペース 1 つと 2 つは、別の文字列として扱われます。期待する出力をコメントに書き写してから組み立てると、ずれに気づきやすくなります。
やってみよう
multTable(int n) を完成させて、n の段の答えを半角スペース区切りで並べた文字列を返してください。multTable(3) なら "3 6 9 12 15 18 21 24 27" です。
forでiを1から9まで動かす- ループの中で
n * iを計算し、結果を貯める変数につないでいく - 区切りのスペースがちょうど 8 か所になるように組み立てる
- 実行して
3710の 4 件を通す
multTable(0) は "0 0 0 0 0 0 0 0 0" です。値が全部同じでも 9 個並び、末尾にスペースは付きません。ここが通れば、区切りの入れ方が正しく書けている証拠になります。
要件
- クラス名は
Solution、メソッド名はmultTable、引数はint n1 つ、戻り値の型はString forループを使い、iを 1 から 9 まで動かしながらn * iを組み立てること- 値同士の区切りは半角スペース 1 つ。末尾には余計な空白を残さないこと (
"3 6 9 12 15 18 21 24 27"の形式)
入出力例
multTable(3) → "3 6 9 12 15 18 21 24 27"
multTable(7) → "7 14 21 28 35 42 49 56 63"
multTable(1) → "1 2 3 4 5 6 7 8 9"
multTable(0) → "0 0 0 0 0 0 0 0 0"