会社の先輩から新米のぼくに出された、Javaでfor文を使い色んな三角形を作る問題です。
こちらはJavaですが、単純なfor文で作れるので他の言語でも挑戦してみてください。
扱う形は以下の画像のとおり。
対象読者
・プログラミングを勉強中の方
・最近エンジニアになった方
・Javaを勉強したい方
#問題① 正三角形 ▲
public class Main {
public static void main(String[] args) {
int max = 5;
String star = "*";
for (int i = 0; i < max; i++) {
for(int j = 0; j < max-i; j++) {
System.out.print(" ");
}
for(int k = 0; k <= (i*2); k++) {
System.out.print(star);
}
System.out.println("\n");
}
}
}
##解説
・一つ目のfor文(i)で三角形の高さを定義する(今回は事前に変数max = 5としています。)
・2つ目のfor文(j)で空白("")を定義。
三角形のため、最初は空欄が最大、*の数と反比例して徐々に空欄を少なくするので
条件式はj < max-i;となります。
・3つ目のfor文(k)で*を出力。
・最後に1ループが終わる毎にprintlnで改行してあげる。(改行しないとずっと横に出力される)
#問題② 逆三角形 ▼
public class Main {
public static void main(String[] args) {
int max = 5;
String star = "*";
for (int i = 0; i < max; i++) {
for(int j = 0; j < i; j++) {
System.out.print(" ");
}
for(int k = 0; k <= max*2-(i*2)-2; k++){
System.out.print(star);
}
System.out.println("\n");
}
}
}
##出力結果
##解説
・一つ目のfor文(i)で三角形の高さを定義する
・2つ目のfor文(j)で空白("")を定義。
①とは異なり、今回は単純に1ずつ増やしてあげる。
・3つ目のfor文(k)で*を出力。
※ごり押しで解いてます・・・ もっといい手があれば教えてください・・orz
#問題③ 直角三角形ver.1 ◣
public class Main {
public static void main(String[] args) {
int max = 5;
String star = "*";
for (int i = 0; i < max; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(star);
}
System.out.println("\n");
}
}
}
##出力結果
##解説
恐らくこれが一番単純でしょう。
・一つ目のfor文(i)で三角形の高さを定義する
・2つ目のfor文(j)で一つずつ増えるよう*を出力。
#問題④ 直角三角形ver.2 ◢
public class Main {
public static void main(String[] args) {
int max = 5;
String star = "*";
for (int i = 0; i < max; i++) {
for (int j = 0; j < max-i; j++) {
System.out.print(" ");
}
for (int k = 0; k <= i; k++){
System.out.print(star);
}
System.out.println("\n");
}
}
}
##出力結果
##解説
これは②逆三角形ができれば簡単だとおもいます。
・一つ目のfor文(i)で三角形の高さを定義する
・2つ目のfor文(j)で空白("")を定義。
最初は空欄が最大、*の数と反比例して徐々に空欄を少なくするので
条件式はj < max-i;となります。
・3つ目のfor文(k)で*を出力。ひとつずつ増やすのでk <= iとなります。
#問題⑤ ひし形 ◇
public class Main {
public static void main(String[] args) {
int max = 5;
String star = "*";
for (int i = 0; i < max; i++) {
for (int j = 0; j < max-i; j++) {
System.out.print(" ");
}
for (int k = 0; k <= ((i-1)*2); k++) {
System.out.print(star);
}
System.out.println("\n");
if (i == 4){
for (int a = 0; a < max; a++) {
for(int b = 0; b < a; b++) {
System.out.print(" ");
}
for(int c = 0; c <= max*2-(a*2)-2; c++){
System.out.print(star);
}
System.out.println("\n");
}
}
}
}
}
##出力結果
解説
これはしばらく解くのに考えました。結果としてはif文を使って、正三角形と逆三角形の両方を
出力するという手を使いましたが、恐らくもっといい方法がある気がします・・・
まずは、*が1~7個の間は正三角形の方法で出力し、*が9~1個にかけて逆三角形で表します。
if (i == 4)とし、iのループが4回回ったタイミングで▲と▼を切り替えましょう。
あとは、①~④のコードを再利用すれば解けます。
##まとめ
for文を使って色んな形を出力する方法をまとめました。
for文は実務でも頻出ですし、コードの構造を考える練習になるのでぜひやってみてください (^^)/