アプリ版:「スタンプのみでお礼する」機能のリリースについて

JAVAの勉強をしていますが、本の練習問題でわからなくて困っています。for文で以下の処理を行いたいです(do,whileはなしです)が、
*を5個ごとに改行したいのですが、改行してくれません。

問題の部分↓

if (n % 5 == 0)
System.out.println();

何か良い方法はありませんか?お願いします。

-------------------------------------------------
//(数を読み込んで)だ個数だけ * を5個ごと改行しながら表示

int n = 0;
for (int i = n; n <= 0;){
System.out.print("何個*を表示しますか : ");
n = stdIn.nextInt();
}

for (int i = 1; i <= n; i++){
System.out.print("*");
if (n % 5 == 0)
System.out.println();
}

------------------------------------------------

A 回答 (4件)

if (n % 5 == 0)がおかしいです。


nっていうのは*をいくつ表示するかっていうものです。
で5個ごとに改行したいなら
if(i % 5 ==0)にしないといけないと思います。
    • good
    • 1
この回答へのお礼

if (i % 5 == 0) ですね、思ってみれば小さなミスでした。
ありがとうございます。

お礼日時:2008/12/25 22:21

少々屁理屈ですが、for文のみで行う方法を考えましたので参考にでもしてもらえると幸いです。



int n=28,count=0,length=0;
for(int i=0;i<n/5;i++){
count++;
length=(n/5==count)?3:5;
for(int j=0;j<length;j++){
System.out.print("*");
}
System.out.println();
}
    • good
    • 0
この回答へのお礼

ごめんなさい。難しかったです。

お礼日時:2008/12/25 22:19

if (i % 5 == 0)


System.out.println();
    • good
    • 0
この回答へのお礼

if (n % 5 == 0) でした。理屈がわかりました。
ありがとうございます。

お礼日時:2008/12/25 22:18

このように記述してはどうですか?


------------------------------------------
for (int i = 1; i <= n; i++)
{
if (i % 5 == 0)
{
System.out.println("5個置きです。");
}
}
------------------------------------------
for文の中で宣言しているint i は1から開始し、
ループする毎に1ずつカウントアップされていきます。
for文の中でif文を用意し、ここでカウンタであるiが
5で割りきれる場合に中の処理を行います。

こうすればnが5以上であれば最低1回はif内が実行されるし、
nが13などの場合にも5周目、10周目にif内が実行されるはずです。

この回答への補足

ご回答ありがとうございます

ヒントをもらえたので、以下を試しましたが、if か elseの片方しかループできないです(n % 5 != 0 にすると *改行 だけします)

//nを6とすると
for (int i = 1; i <= n; i++){
if (n % 5 == 0) {
System.out.println("*");
} else {
System.out.print("*");
}
}

-----表示-----------------------
******

補足日時:2008/12/25 13:31
    • good
    • 1
この回答へのお礼

見落としてました。
if (n % 5 == 0) でうまくいきました。

お礼日時:2008/12/25 22:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています