- ベストアンサー
JAVAのfor文で困っています。
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(); } ------------------------------------------------
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
if (n % 5 == 0)がおかしいです。 nっていうのは*をいくつ表示するかっていうものです。 で5個ごとに改行したいなら if(i % 5 ==0)にしないといけないと思います。
その他の回答 (3)
- zozy
- ベストアンサー率60% (20/33)
少々屁理屈ですが、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(); }
お礼
ごめんなさい。難しかったです。
- chikuwabu
- ベストアンサー率25% (19/76)
if (i % 5 == 0) System.out.println();
お礼
if (n % 5 == 0) でした。理屈がわかりました。 ありがとうございます。
- Splatter
- ベストアンサー率41% (181/440)
このように記述してはどうですか? ------------------------------------------ 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 (n % 5 == 0) でうまくいきました。
補足
ご回答ありがとうございます ヒントをもらえたので、以下を試しましたが、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("*"); } } -----表示----------------------- ******
お礼
if (i % 5 == 0) ですね、思ってみれば小さなミスでした。 ありがとうございます。