String#repeat
というメソッドがあります(その文字列を指定回数繰り返した文字列を返す)
repeat(int) | String (Java SE 11 & JDK 11 )
Processing 3.5.4は、Java8ベースなので残念ながら使えません(が、説明のためなので最後まで読んでください)
Processing 4.0 beta 8は、Java17ベースになっているので使えます^^
repeat
を使うと、こう書けることはいいでしょうか?(でないと続けられませんが^^;
Processing
1for (int i = 0; i < 10; i++) {
2 print(nf(i, 2) + ":");
3
4 print(" ".repeat(9 - i));
5 print("*".repeat(i + 1));
6
7 println();
8}
i
が0の時:スペースを9個・*を1個
i
が1の時:スペースを8個・*を2個
...
i
が9の時:スペースを0個・*を10個
次にrepeat
をfor
で単純に置き換えます。
Processing
1for (int i = 0; i < 10; i++) {
2 print(nf(i, 2) + ":");
3
4 for (int j = 0; j < 9 - i; j++) {
5 print(" ");
6 }
7 for (int j = 0; j < i + 1; j++) {
8 print("*");
9 }
10
11 println();
12}
スペースを9 - i
回・*をi + 1
回、出力するように単純に置き換えました。
最後にfor
をひとつにまとめます。
Processing
1for (int i = 0; i < 10; i++) {
2 print(nf(i, 2) + ":");
3
4 for (int j = 0; j < 10; j++) {
5 if (j < 9 - i) print(" ");
6 else print("*");
7 }
8
9 println();
10}
ひとつ前のコードのfor (int j = 0; j < 9 - i; j++)
の、j < 9 - i
の部分がif
条件に入っています。
ループの回数が10回に増えたとしても、j < 9 - i
の間はスペースを出力します。
*は残った回数になるわけなので、i + 1
は不要になりました(意味としては10 - (9 - i)
)
とは言え「登場人物(i
・j
・10
)をこねくり回してる間にできちゃった」ってことが多い気はします。
i<j
・i>j
「う~~ん違う!」
10-i>j
・i<10-j
「おっ!?おしい~!!」
みたいなw
少なくとも私は何も考えずいじっていたらできてました。なので上の説明は全部後付けです^^;
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。