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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

7回答

6342閲覧

JAVA, Eclipseで、「*」をダイヤ型に並べて表示する方法を教えてください

Koko_Hekmatyar

総合スコア15

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2016/11/29 02:48

###前提・実現したいこと
□□□*
□□***
□*****
*******
□*****
□□***
□□□*
このように並べたいです。(四角は無視してください)

###発生している問題・エラーメッセージ

三角形を作るまではできたのですが、下半分を逆に三角形に表示する方法がわかりません。

###該当のソースコード

JAVA

1public class StarGraph { 2 3 public void outGraph(){ 4 final int star=4; 5 for (int cnt=1 ; cnt<=star ; cnt++){ 6 for(int count=1 ; count<=star-cnt ; count++){ 7 System.out.print(" "); 8 } 9 for(int count=1 ; count<=cnt*2-1; count++){ 10 System.out.print("*"); 11 } 12 System.out.println(); 13 14 15 } 16 } 17}

JAVA

1public class Run { 2 3 public static void main(String[] args) { 4 StarGraph myStarGraph = new StarGraph(); 5 myStarGraph.outGraph(); 6 } 7 8}

###試したこと
上のコードに書き加えていろいろ試したのですが、形が崩れてしまいました。

###補足情報(言語/FW/ツール等のバージョンなど)
Eclipse Java EE IDE for Web Developers.
Version: Mars.1 Release (4.5.1)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

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

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

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

guest

回答7

0

ベストアンサー

「方法を教えて」だと、ロジックを教えればいいのかコードも教えればいいのかはっきりしないので、
どちらかを明記したほうがいいかもしれませんね。

今回は簡単な問題なので、両方載せておきます

まず考え方ですが、上半分がわかっているのであれば、あとはその逆をすればいいですよね。
つまり、初期値としきい値を逆にして、カウントを減らしていけばいいことになります。
ただ、そのまま減らしていっただけのコードを書くと真ん中が二行できてしまうので、初期値を一つ減らします。

コードは以下のようになります。

Java

1public class StarGraph { 2 public void outGraph(){ 3 final int star=4; 4 5 /* 上半分 */ 6 for (int cnt=1 ; cnt<=star ; cnt++){ 7 for(int count=1 ; count<=star-cnt ; count++){ 8 System.out.print(" "); 9 } 10 for(int count=1 ; count<=cnt*2-1; count++){ 11 System.out.print("*"); 12 } 13 System.out.println(); 14 } 15 16 /* 下半分 */ 17 for (int cnt=star-1 ; cnt>=1 ; cnt--){ 18 for(int count=1 ; count<=star-cnt ; count++){ 19 System.out.print(" "); 20 } 21 for(int count=1 ; count<=cnt*2-1; count++){ 22 System.out.print("*"); 23 } 24 System.out.println(); 25 } 26 } 27}

それと、今回は単純にJavaの話なので、Eclipseタグは不要かと想います。

投稿2016/11/29 03:06

GrassfieldK

総合スコア50

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

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

Koko_Hekmatyar

2016/12/08 00:29

アドバイスありがとうござます。 次から気を付けますm(_ _)m
GrassfieldK

2016/12/08 02:11

いえいえ!こちらこそBAに選んでもらって嬉しいです。 ただKokoさんはまだ初心者とのことですので、今回は質問文のコードに沿ったロジックでの回答をしましたが、詰めればもっと効率的なロジックで実現できます。 他の回答者さんがいくつか別のロジックを使われているようですので、参考にしてみるといいかもしれませんね!
guest

0

現在の行n(=1,2,...,7)に対して
スペースの数が|n-4|
星の数が7-2|n-4|です。

投稿2016/11/29 03:03

ozwk

総合スコア13521

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

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

0

以下のコードでできました

java

1class StarGraph { 2 3 public void outGraph(){ 4 final int star=4; 5 for (int cnt=1 ; cnt<=star ; cnt++){ 6 for(int count=1 ; count<=star-cnt ; count++){ 7 System.out.print(" "); 8 } 9 for(int count=1 ; count<=cnt*2-1; count++){ 10 System.out.print("*"); 11 } 12 System.out.println(); 13 14 15 } 16 17 for (int cnt=star-1 ; cnt>=1 ; cnt--){ 18 for(int count=star-cnt+1 ; count>1 ; count--){ 19 System.out.print(" "); 20 } 21 for(int count=cnt*2-1 ; count>=1; count--){ 22 System.out.print("*"); 23 } 24 System.out.println(); 25 26 27 } 28 29 30 } 31} 32 33public class Run7 { 34 35 public static void main(String[] args) { 36 StarGraph myStarGraph = new StarGraph(); 37 myStarGraph.outGraph(); 38 } 39 40}

投稿2016/11/29 03:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

for文の中のこのコード

java

1for(int count=1 ; count<=star-cnt ; count++){ 2 System.out.print(" "); 3} 4for(int count=1 ; count<=cnt*2-1; count++){ 5 System.out.print("*"); 6} 7System.out.println();

これが、外側のfor文のcntが1,2,3,4の時にそれぞれ1行目、2行目、3行目、4行目の出力がなされるわけです。
後半は、この3行目、2行目、1行目の順に出力するようにすればいいわけなので、中身はこのまま、cntを3,2,1と変化するように作ればいいだけです。

投稿2016/12/02 01:06

swordone

総合スコア20651

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

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

0

小さな三角形を表示するためのループを別に作ればできました。
なにかの参考になれば幸いです。

public class StarGraph { public void outGraph(){ final int star=4; final int star2=7; for (int cnt=1 ; cnt<=star ; cnt++){ for(int count=1 ; count<=star-cnt ; count++){ System.out.print(" "); } for(int count=1 ; count<=cnt*2-1; count++){ System.out.print("*"); } System.out.println(); } for (int c=1 ; c<=star ; c++){ for(int count=1 ; count<=c ; count++){ System.out.print(" "); } for(int count=1 ; count<star2-(2*c-1); count++){ System.out.print("*"); } System.out.println(); } } }

投稿2016/12/01 13:12

Give50

総合スコア9

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

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

0

java

1class StarGraph { 2 public void outGraph() { 3 final int maxCharRow = 4; 4 final char mark = '*'; 5 BiFunction<Character, Integer, String> repeatChar = (c, len) -> String.format("%" + len + "s", c).replace(' ', c); 6 BiConsumer<String, Integer> display = (s, i) -> System.out.printf("%" + (maxCharRow - i + s.length()) + "s%s", s, System.lineSeparator()); 7 8 for (int i = 1; i <= maxCharRow; i++) { 9 String str = repeatChar.apply(mark, i * 2 - 1); 10 display.accept(str, i); 11 } 12 13 for (int i = maxCharRow - 1; i >= 1; i--) { 14 String str = repeatChar.apply(mark, i * 2 - 1); 15 display.accept(str, i); 16 } 17 } 18}

投稿2016/11/29 07:27

root_jp

総合スコア4666

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

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

0

完全なコート載せるのもありかと思いましたが勉強のためにアドバイスだけにしておきます。
続けて逆の処理するだけですしね。(一つ小さい逆三角形を描画するだけ)

「開始位置と長さを指定するとその分だけ星を描画する関数」を一つ定義しておくとやりやすいと思いますよ

public void drawStar(int start, int length){ }

投稿2016/11/29 03:02

編集2016/11/29 03:03
ishi9

総合スコア1294

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問