質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

7回答

1833閲覧

【Java】ソースコードの書き方について質問です。

nishimy

総合スコア14

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/10/20 10:53

下記のコンソール結果になるようなソースを作っています。

■■
■■■
■■■■
■■■■■
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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答7

0

問題無いと思います

求めたい結果の行と四角の個数の関係は

1行目で1個
2行目で2個
・・・
5行目で5個

なので、 i と j を使った条件を書くことになりますね

ただ、無駄なループもしてしまうので j の for文を少し工夫すれば、if(条件)を書かなくてよくなります

投稿2015/10/20 11:10

takito

総合スコア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
katoy

総合スコア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

12■■ 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
SKYYFISH

総合スコア654

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2015/10/20 13:07

この後半のコードだと,■があってもなくても改行が入り,望む形にならないのでは?
SKYYFISH

2015/10/20 13:12

よくよく見たらその通りですね。改行を入れる位置を修正しました。
guest

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

akiruno-oneone

総合スコア815

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

forを使って書くならこのようになるでしょう.

java

1String str = "■"; 2for(int i = 1; i <= 5; i++){ 3 for(int j = 0; j < i; j++){ 4 System.out.print(str); 5 } 6 System.out.println(); 7}

投稿2015/10/20 13:09

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nishimy

2015/10/20 13:13

ありがとうございました!! 解決です。
guest

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

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

変数i,jとbreakを使えばうまくいくと思います。
がもう少しうまくやる方法がありそうです。

投稿2015/10/20 11:15

編集2015/10/20 11:19
yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問