• ベストアンサー

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

  • Java
  • 回答数4
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

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

pochi1234
質問者

お礼

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

その他の回答 (3)

  • zozy
  • ベストアンサー率60% (20/33)
回答No.3

少々屁理屈ですが、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(); }

pochi1234
質問者

お礼

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

  • chikuwabu
  • ベストアンサー率25% (19/76)
回答No.2

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

pochi1234
質問者

お礼

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

  • Splatter
  • ベストアンサー率41% (181/440)
回答No.1

このように記述してはどうですか? ------------------------------------------ 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内が実行されるはずです。

pochi1234
質問者

お礼

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

pochi1234
質問者

補足

ご回答ありがとうございます ヒントをもらえたので、以下を試しましたが、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("*"); } } -----表示----------------------- ******

関連するQ&A

  • javaのfor文

    nの値の和を求めるのはこれ以外に書き方はありますか? import java.util.*; class SampleGoo{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print("整数値:");int n = std.nextInt(); int ans = 0; for (int i = 1;i <= n;i++){ ans = ans + i; } System.out.println(Integer.toString(ans)); } }

  • javaのfor文

    nの値の和を求めるのはこれ以外に書き方はありますか? import java.util.*; class SampleGoo{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print(\"整数値:\");int n = std.nextInt(); int ans = 0; for (int i = 1;i <= n;i++){ ans = ans + i; } System.out.println(Integer.toString(ans)); } }

  • javaのプログラム

    int型の配列の各要素に1~10の乱数を代入し、各要素の値を縦向きの*のグラフで表示するプログラムを作っているのですが、結果がランダムででるので、自分の書いたプログラムが正しいのかわかりません。ソースを載せますので合っているのか間違っているか教えて下さい。もし間違っているならどこが間違いなのか教えていただけると嬉しいです。よろしくお願いします。 ●ソース import java.util.Random; import java.util.Scanner; class Graph { public static void main(String[] args){ Random rand = new Random(); Scanner stdIn = new Scanner(System.in); System.out.print("要素数:"); int n = stdIn.nextInt(); int a[] = new int[n]; for (int i = 0; i < n; i++) a[i] = 1 + rand.nextInt(10); for (int i = 1; i <= 10; i++){ for (int j = 0; j < n; j++) if (a[j] <= i) System.out.print("* "); else System.out.print(" "); System.out.println(); } } } ●実行例 要素数:12 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    • ベストアンサー
    • Java
  • JAVAで配列を使って * を縦向きのグラフで表示したいです。

    JAVAの勉強をしています。 このプログラムは配列に乱数を生成して * を 横向きにするプログラムです。 練習問題で、以下のプログラムを書き換えて、* を縦向きのグラフで表示する問題なのですが、解く方法がわかりません。 どなたか答えもしくはヒントを下さい。 よろしくお願いします。 import java.util.Random; import java.util.Scanner; public class Test06_04 { public static void main (String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in); System.out.print("要素数 : "); int n = stdIn.nextInt(); //要素数を読み込む int[] a = new int[n]; //配列を生成 for (int i = 0; i < n; i++) { a[i] = 1+ rand.nextInt(10); } for (int i = 0; i < n; i++) { System.out.print("a[" + i + "] : "); for (int j = 0; j < a[i]; j++) System.out.print('*'); System.out.println(); } } }

    • ベストアンサー
    • Java
  • java for文、if文を使っての三角形

    例:1 23 456 78910 ・・・・・・のようにひょうじさせるプログラムを作成するのに、for文とIf文を使っての三角形を   作成したいのですが、If文の条件式が分からないのとどうしたら、上記のようなプログラムが   出来るのか教えてください。お願いします。 public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ // 行に表示させる個数を表現するための変数がないため今回、新たに変数を用意する。 int a = 1; //行の終わりを改行して1増やすための変数がないため今回、新たに変数を用意する。 int b = 1; // 1~100までの数字を用意する。 for (int i = 1; i <= 100; i++) { //変数iをSystem.out.printを使って変数iをコンソールの中に出力させる。 System.out.print(i); //System.out.println("")を使って改行する。 System.out.println(" "); //変数iに1増加して数字を順番にする。 i++; if(a <= i){ System.out.print(a);

  • JAVAの演習問題

    現在JAVAを独学中なのですが、以下の演習問題でつまずいております。 (解答がない演習問題なので、このサイトにて質問することにしました。) 実行例 1からnまでの和を求めます。 nの値:5 1から5までの和は15です。 (5はキーボードにて入力された値。15はその結果の値。) 自分の解答は以下になるのですが、実行例のようになりません。 ご解答頂けると大変助かります。 import java.util.Scanner; class Ensyuu413 { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.println("1からnまでの和を求めます。"); System.out.print("nの値:"); int n = stdIn.nextInt(); for ( int i = 0, j = 0; i <= n; i++, j += i) System.out.println("1から"+n+"までの和は"+j+"です。"); } }

  • *を表示させるプログラムを

    //putChars()メソッドを呼ばず(使わず) for文のネストで、できますか import java.util.Scanner; class IsoscelesTriangleRB { //--- 文字cをn個連続表示 ---// static void putChars(char c, int n) { while (n-- > 0) System.out.print(c); } public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.println("右下直角の三角形を表示します。"); System.out.print("段数は:"); int n = stdIn.nextInt(); for (int i = 1; i <= n; i++) { putChars(' ', n - i); // ' 'をn - i個表示 putChars('+', i); // '+'を i 個表示 System.out.println(); } } }

  • 要素数が10の配列で、乱数0~9の値が重複しないようにする方法がわからなくて困っています。

    JAVAの練習問題でわからなくて困っています 以下は線形探索のプログラムで、このプログラムを改良して、 要素数が10の配列で、乱数0~9の値が重複しないようにする方法がわからなくて困っています。 以下のような簡単なプログラムでできる方法で行いたいです。 どなたか答えまたはヒントを下さい、お願いします。 ------------------------------------------------------------ import java.util.Random; import java.util.Scanner; public static void main (String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in); final int n = 10; //要素数 int[] a = new int[n]; //配列を宣言 for (int j = 0; j < n;) a[j] = rand.nextInt(10); System.out.print("配列aの全要素の値\n{ "); for (int j = 0; j < n; j++) System.out.print(a[j] + " "); System.out.println("}"); System.out.print("探す数値 : "); int key = stdIn.nextInt(); int i; for (i = 0; i < n; i++) if (a[i] == key) break; if (i < n) //探索成功 System.out.println("それはa[" + i + "]にあります。"); else //探索失敗 System.out.println("それはありません。"); } }

  • java while文です。教えてください(__)

    public class mondai2{ //プログラム開始 public static void main(String args[]){ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int i; int ans=0; int seikai=0; for(i=0;i<5;i++){ try{ { Random ran = new Random(); int num1 = ran.nextInt(8)+1; int num2 = ran.nextInt(8)+1; ans = num1*num2; System.out.print("問題"+(i+1)+":"); System.out.print(num1 + "×" +num2 + "="); String s =in.readLine(); seikai = Integer.parseInt(s); if(seikai==ans){ System.out.println("正解"); }else{ System.out.println("不正解"); } } }catch(IOException e){ System.out.println("エラー"); } } } } このプログラムをwhile文か、do while文にして正解が出るまで問題が出続けるようにしたいんですけど、まったくわからなくて困っています>< 教えてください(+o+)

    • ベストアンサー
    • Java
  • JAVAの演習問題

    現在JAVAを独学中なのですが、以下の演習問題でつまずいております。 (解答がない演習問題なので、このサイトにて質問することにしました。) 実行例 1からnまでの和を求めます。 nの値:5 1から5までの和は15です。 (5はキーボードにて入力された値。15はその結果の値。) 自分の解答は以下になるのですが、実行例のように表示されません。 ご解答頂けると大変助かります。 import java.util.Scanner; class Ensyuu413 { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.println("1からnまでの和を求めます。"); System.out.print("nの値:"); int n = stdIn.nextInt(); for ( int i = 0, j = 0; i <= n; i++, j += i) System.out.println("1から"+n+"までの和は"+j+"です。"); } } 実行しますと、以下のように実行されてしまいます。 1からnまでの和を求めます。 nの値:5 1から5までの和は0です。 1から5までの和は1です。 1から5までの和は3です。 1から5までの和は6です。 1から5までの和は10です。 1から5までの和は15です。

専門家に質問してみよう