Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

*と空白を使い菱形表示

私は今、javaの勉強をしているのですがまだまだ
初心者でわからなく困っています。
画面にひし形の形を出力したいのですが、
外枠だけを"*"で表示し、中は空白にしたいと
考えています。

for文を使い、

for(i=1;i<6;i++){
 for(j=1;j<6;j++){
  if((i+j)%2!=0 && ??? ){
   System.out.print("*");
  } else {
   System.out.print(" ");
  }
  System.out.println("");
 }
}

上記の???の部分を作り、作成できないかと考えているのですが無理でしょうか?
どなたかご教授いただければ幸いです。
よろしくお願いいたします。

6

回答

13003

閲覧

6件の回答

評価

0

前にも何度か同じような質問があったけど、見ましたか。
一回メモ帳で手で書いて、空白と"*"の数をそれぞれ数えて、どういう計算にしたらいいかを考えてみよう。
分けて考えれば、計算自体は小学生レベルのはず。

評価

0

普通の四角は簡単だけど、菱形は難しいかもね。
例のようなロジックでは、真ん中に点が残らんかな。
菱形の場合は、象限ごとに、
4本の斜め線を引く、と考えた方がいいかも。

評価

0

回答ありがとうございます。
考えてみます。

評価

0

まずは上半分を表示できるようにして、
あとは下半分・・・とやるといいかもです。

私が自力で出来たのは
  *
 * *
*   *
 *   
  *
ここまででした orz
ひし形でしかも間を抜くとなると結構頭がゴチャゴチャになりました。


評価

0

二重ループはつまりXY座標のある四角い領域になるわけですが、中心座標を(0,0)で考えればXとYの関係でうまく描けますね。

int cnt = 3;
for(int y = -cnt;y<=cnt;y++) {
    for(int x = -cnt;x<=cnt;x++) {
        if(Math.abs(y+x)==cnt || Math.abs(y-x)==cnt) {
            System.out.print('*');
        } else {
            System.out.print(' ');
        }
    }
    System.out.println();
}

評価

0

    for(i=1;i<6;i++){
            for(j=1;j<6;j++){
                if((i+j)%2!=1 && ((i+j)%4==0 || (i/2 + j/2)==3)){
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println("");
        }

このようにしてみました!
ちょっとモヤモヤ感は残りますが……

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。