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

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

ただいまの
回答率

90.50%

  • Java

    15810questions

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

  • Eclipse

    1921questions

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

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

解決済

回答 7

投稿

  • 評価
  • クリップ 0
  • VIEW 1,879

前提・実現したいこと

□□□*
□□***
□*****
*******
□*****
□□***
□□□*
このように並べたいです。(四角は無視してください)

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

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

該当のソースコード

public class StarGraph {

    public void outGraph(){
        final int star=4;                
        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();                    


        }
    }
}
public class Run {

    public static void main(String[] args) {
        StarGraph myStarGraph = new StarGraph();
        myStarGraph.outGraph();
    }

}

試したこと

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

補足情報(言語/FW/ツール等のバージョンなど)

Eclipse Java EE IDE for Web Developers.
Version: Mars.1 Release (4.5.1)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 7

checkベストアンサー

+1

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

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

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

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

public class StarGraph {
    public void outGraph(){
        final int star=4;

        /* 上半分 */
        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 cnt=star-1 ; cnt>=1 ; 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();
        }
    }
}

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/08 09:29

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

    キャンセル

  • 2016/12/08 11:11

    いえいえ!こちらこそBAに選んでもらって嬉しいです。

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

    キャンセル

+1

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

class StarGraph {

    public void outGraph(){
        final int star=4;                
        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 cnt=star-1 ; cnt>=1 ; cnt--){    
            for(int count=star-cnt+1 ; count>1 ; count--){
                System.out.print(" ");                
            }
            for(int count=cnt*2-1 ; count>=1; count--){    
                System.out.print("*");                
            }
            System.out.println();                    


        }


    }
}

public class Run7 {

    public static void main(String[] args) {
        StarGraph myStarGraph = new StarGraph();
        myStarGraph.outGraph();
    }

}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

class StarGraph {
    public void outGraph() {
        final int maxCharRow = 4;
        final char mark = '*';
        BiFunction<Character, Integer, String> repeatChar = (c, len) -> String.format("%" + len + "s", c).replace(' ', c);
        BiConsumer<String, Integer> display = (s, i) -> System.out.printf("%" + (maxCharRow - i + s.length()) + "s%s", s, System.lineSeparator());

        for (int i = 1; i <= maxCharRow; i++) {
            String str = repeatChar.apply(mark, i * 2 - 1);
            display.accept(str, i);
        }

        for (int i = maxCharRow - 1; i >= 1; i--) {
            String str = repeatChar.apply(mark, i * 2 - 1);
            display.accept(str, i);
        }
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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();
           }
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

for文の中のこのコード

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Java

    15810questions

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

  • Eclipse

    1921questions

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