下記のコンソール結果になるようなソースを作っています。
■
■■
■■■
■■■■
■■■■■
public static void main(String[] args) {
String s = ("■");
for(int i = 0; i<5; i++){
for(int j = 0; j<5; j++){
if(条件){
System.out.print(s +" ");
}
System.out.println();
}
}
}
ifの条件(else ifなど)を設定することで上記結果になると考えましたが、見当違いでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
0
問題無いと思います
求めたい結果の行と四角の個数の関係は
1行目で1個
2行目で2個
・・・
5行目で5個
なので、 i と j を使った条件を書くことになりますね
ただ、無駄なループもしてしまうので j の for文を少し工夫すれば、if(条件)を書かなくてよくなります
投稿2015/10/20 11:10
総合スコア3111
0
3つの方法を作ってみました。
sub1() 質問文のコードをベースにしたもの
sub2() sub1() ではメソッド中で stdout に出力しています。
junit などでテストしやすくするため、sub2() では 三角形の文字列全体を生成しています。
組み立てた結果をSystem.out.print() で一気に出力します。
sub3() sub2() での文字列の組み立て方を変更しています。for ループのネストを除去しています。
汎用性を高めるため、三角形の大きさをパラメータで渡すようにもしています。
java
1public class Triangle { 2 // 改行コード 3 static private String line_sep = System.getProperty("line.separator"); 4 5 public static void main(String[] args) { 6 sub1(); 7 8 String triangle = sub2(); 9 System.out.print(triangle); 10 11 triangle = sub3(5); 12 System.out.print(triangle); 13 } 14 15 static void sub1() { 16 String str = "■"; 17 for (int i = 1; i <= 5; i++) { 18 for (int j = 0; j < i; j++) { 19 System.out.print(str); 20 } 21 System.out.println(); 22 } 23 } 24 25 // 直接 stdout に出力せず、String を組み立てる。 26 static String sub2() { 27 String str = "■"; 28 String buf = ""; 29 for (int i = 1; i <= 5; i++) { 30 for (int j = 0; j < i; j++) { 31 buf += str; 32 } 33 buf += line_sep; 34 } 35 return buf; 36 } 37 38 // String の組み立てかたを工夫する。 39 // See 40 // http://stackoverflow.com/questions/1235179/simple-way-to-repeat-a-string-in-java 41 static String sub3(int height) { 42 String str = "■"; 43 StringBuilder buf = new StringBuilder(); 44 for (int i = 1; i <= height; i++) { 45 String line = new String(new char[i]).replace("\0", str); 46 buf.append(line).append(line_sep); 47 } 48 return buf.toString(); 49 } 50} 51
実行例:
■ ■■ ■■■ ■■■■ ■■■■■ ■ ■■ ■■■ ■■■■ ■■■■■ ■ ■■ ■■■ ■■■■ ■■■■■
投稿2015/10/20 22:07
編集2015/10/21 12:40総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ソースを推察すると、■を先頭で定義したいから
for文を2回重ねたという感じでしょうか?
そうでしたら、以下のように書くとスマートです。
java
1String square = "■"; // 定数として使う 2String display = square; // 表示用の変数として使う 3for(int i=0; i<5; i++){ 4 System.out.println(display); 5 display += square; 6}
で、表示すると以下のようになります。
bash
1■ 2■■ 3■■■ 4■■■■ 5■■■■■
また、提示されたソースを元に書くとすれば、
以下のような感じでしょうか。
java
1String s = ("■"); 2for(int i = 0; i<5; i++){ 3 for(int j = 0; j<5; j++){ 4 if(i>=j){ 5 System.out.print(s); 6 } 7 } 8 System.out.println(); 9}
if文の中身ですが、
i=0 のとき j=0 (1回) -> "■"
i=1 のとき j=0,1 (2回) -> "■■"
i=2 のとき j=0,1,2 (3回) -> "■■■"
i=3 のとき j=0,1,2,3 (4回) -> "■■■■"
i=4 のとき j=0,1,2,3,4 (5回) -> "■■■■■"
というロジックです。
投稿2015/10/20 12:58
編集2015/10/20 13:11総合スコア654
0
ある条件によって、5個の棒グラフを描画するのですから、以下ではないでしょうか。
public static void main(String[] args) {
String s = ("■");
String outs; // 出力用文字列
for(int i = 0; i<5; i++){
outs = ""; // 出力文字列の初期化
for(int j = 0; j<5; j++){
if(条件) {
outs = outs + s; //棒を作成する
}
}
System.out.println(outs); //棒を出力する
}
}
上記の条件に「i >= j」を入れると、例にある出力になります。
投稿2015/10/20 13:19
総合スコア815
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
それで問題ありません。
ただ、例えば5行を10行に変更しようと思った時に
i
,j
両方の終了条件を書き換える必要があります。
面倒ですね。
j
の繰り返し範囲は5
である必要はありませんよね?
そもそものやりたいことは、
「i
行目に、■
をi+1
個(スペースで区切って)書く」
ことかと思います。
java
1for(int i=0; i<5; i++){ 2 writeSquare(i+1); 3}
こう書けたら嬉しいですけどwriteSquare
なんてそんな都合のいいもの存在しません。
ないなら作ってみるのも面白いと思います。
投稿2015/10/20 12:20
総合スコア13521
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
変数i,jとbreakを使えばうまくいくと思います。
がもう少しうまくやる方法がありそうです。
投稿2015/10/20 11:15
編集2015/10/20 11:19総合スコア18155
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。