• ベストアンサー

Javaのfor文による繰り返しを初心者に教えてく

ださい。 Java初心者です。 入門書のみで何とかがんばってるのですがつまずいているのでどなたか助けてください。 Userクラスを書き、Mainクラスに複数のnew User()を生成したいです。 そこで、 for(int ninzuu = 1; ninzuu<5; ninzuu++){ User ui = new User(); } のように記述しu1、u2、、と作りたいのですがだめみたいです。 どうすれば任意の数のUserを作れますか?

  • Java
  • 回答数3
  • ありがとう数6

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

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

詳細は anmochi さんの記事を読んで頂くとして、 int ninzuuLng = 5; User[] users = new Users[ninzuuLng]; for(int ninzuu = 0; ninzuu<ninzuuLng; ninzuu++){ users[ninzuu] = new User(); } (例えば このように ninzuuLng 変数を使えば)データ数量の最大値を変更したい場合、ninzuuLng 変数の数値の変更だけで「配列、for ループ」の両方の最大値を変更できます。

oktakuto
質問者

お礼

まさに私がしたかったことを見透かされたかのような回答ありがとうございます。 anmochiさんの回答もシンプルでわかりやすかったのですが、ユーザー数を最初に入力して可変にしたかったのでまさにベストアンサーです。 ありがとうございます!!

その他の回答 (2)

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

こんなのでどうだろう。ninzuuの開始を1から0に変えている事に注意。 User[] users = new Users[5]; for(int ninzuu = 0; ninzuu<5; ninzuu++){ users[ninzuu] = new User(); } 先頭で「要素数が5であるUserというクラスの配列」を作っている。これはUserクラスのインスタンスを入れる5個の箱ができたと思ってほしい。あくまでも箱であり、この行ではUsersのインスタンスは何一つ作られていない。その次にfor文で0、1、2、3、4と数字をカウントアップしながらusersという箱にUserのインスタンスを入れていっている。 質問者のコードはfor文により4回Userが作られるがそれを入れる箱がfor文の中で作られては消えて行くために任意の数のインスタンスを作る事ができなかったのだ。 後はusers[1].getUserID()とか、添え字を使う事でこの5つのUserインスタンスを操作していけば良い。

oktakuto
質問者

お礼

素人の質問にもかかわらず早速の回答ありがとうございます! シンプルでわかりやすくすぐ実践できました。 また解決策のみならずなぜうまくいっていないのかまで教えてくださり、javaへの理解が少しだけかもしれないですが深まりました。 重ねてありがとうございます。

  • HNEX
  • ベストアンサー率62% (43/69)
回答No.1

配列やList(可変長配列)などを使うと良いでしょう // 配列の場合 User[] users = new User[5]; for (int i = 0; i < 5; i++) { users[i] = new User(); } // Listの場合 List<User> list = new ArrayList<>(); for (int i = 0; i < 5; i++) { list.add(new User()); }

oktakuto
質問者

お礼

配列のみでなく可変長配列という新しい知識ありがとうございます。 ただ、初心者の私には少し難しく、Userクラスに名前などをセットしたいのですがそれがうまくできそうにないのでシンプルな配列を使おうと思います。 次の機会にはぜひListを使ってみようと思います。 どちらにしてもありがとうございます。

関連する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 for文

    for文について、キーボードで入力して、その数が素数(1またはその数以外で割り切れない数)であるかを判断するコードですが、for文とif文の関係が良くわかりません。ご教示ください。 <サンプル> public static void main(String[] args) throws IOException{ System.out.println("2以上の整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); ※1 for(int i=2; i<=num; i++){ if(i == num){ System.out.println(num + "は素数です。"); ※2 }else if(num % i == 0){ System.out.println(num + "は素数ではありません。"); break; ※1と※2の処理について初心者でもわかるような解説をおねがいできますでしょうか? よろしくお願いいたします。

  • javaのfor文の使い方

    コマンドライン引数で入力した文字が3文字以下ならその文字列を20個文字連結して表示し、4文字以上ならたくさんと表示したいのですが表示できません。 import java.io.*; public class ABC { public static void main(String args[])throws IOException{ BufferedReader myReader = new BufferedReader( new InputStreamReader(System.in), 1 ); String str = myReader,readLine(); if(str.length() >= 4){ System.out.println("たくさん"); } StringBuffer buf = new StringBuffer(str.length()*20); for(int i = 0;i < 20; i++){ buf.append(str); System.out.println(buf); } } } としたら、たくさんと表示されません。どこを修正すればいいでしょうか?ちなみにfor文とStringBufferクラスを用いてというのが条件です。

  • Java for文 だけで逆ピラミッドを作る

    教えてください。 for 文だけで逆ピラミッドを作りたいのですが、*の数が2個ずつ減ればピラミッド 作成なのですが、私の文だと*は1個ずつしか減りません。 2個の指定はどのうように記述すればよいでしょうか? *を3と指定した場合 ***** (5) -***   (3) --*     (1) と表示したいのですが、下の文だと ***** (5) -****  (4) --***   (3) となってしまいます。 import java.io.*; class Sample4 { public static void main(String [] args) throws IOException { System.out.println("いくつ*を入力しますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); int j =0; int i =0; int s =0; //行数制御 for(i=0; i<num; i++) { for(s=0; s<i; s++) { System.out.print("-"); } for(j=num*2-1; j>i; j--) { System.out.print("*"); //System.out.print("d"); } //改行タグ System.out.print("\n"); } } }

  • 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
  • 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
  • for文&if文を使った問題について教えてください。

    参考書の練習問題を解いていて、応用力がないのか理解できない ので、分かる方教えていただけませんか? 問題: キーボードから整数を入力させ、その数が素数であるかどうかを 判断するコードを記述してください。 解答: import java.io.*; class SampleP5 { public static void main(String[] args) throws IOException { System.out.println("2以上の整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); for(int i=2; i<=num; i++){ if(i = = num){ System.out.println(num + "は素数です。"); } else if(num % i = = 0){ System.out.println(num + "は素数ではありません。"); break; } } } } 例えば"7"を入力すると「7は素数です」と出力されるようなんですが、 『i = 7』だとして、『 if(i = = num)』の条件って当てはまるん ですか?for文でiの初期値が2だから、『2 = = 7』で当てはまらない と思うんですが・・・ 考え方が間違っているんですかね? ※ちなみに(= =)のところ、実際はスペース空いてません。  ここの画面での表示上くっついて1本の線になってしまうので、  スペースを空けて入力したまでです。

    • ベストアンサー
    • Java
  • java for文だけで逆ピラミッドを作成する

    Javaの勉強中です。 for文だけで、逆ピラミッドをだしたいのですが、なかなかうまくいきません。 どなたか教えてくださいませ。 まず、整数キーボドから入力します。整数を”段”を表示すると考えて作っています。 そして、さらに、逆ピラミッド(*)を表示するのがゴールです。 私が書いたプログラムです↓ import java.io.*; class Sample4 { public static void main(String [] args) throws IOException { System.out.println("*をの数を入力ししてください"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); int j =0; int i =0; int s =0; //行数制御 for(i=0; i<num; i++) { for(s=0; s<i; s++) { System.out.print("-"); } for(j=0; j<num*2-1; j++) { System.out.print("*"); } //改行タグ System.out.print("\n"); } } } これだと、例えば整数を”7” とした時に下のように”-”は1個ずつ減り いい感じなのですが、”*”が2個ずつ減らないと逆ピラミッドになりません。 num -= -2; と*が2個ずつ入れる式を入れてみたのですが、意図した結果がでず・・ 数日悩んでおります。 1段目:************* 2段目:-************* 3 段目:--************* 4 段目:---************* 5 段目:----************* 6 段目:-----************* 7 段目:-------*************

  • for文とStringBuffer

    javaのfor文の使い方 質問者:asutarisuk コマンドライン引数で入力した文字が3文字以下ならその文字列を20個文字連結して表示し、4文字以上ならたくさんと表示したいのですが表示できません。 import java.io.*; public class ABC { public static void main(String args[])throws IOException{ BufferedReader myReader = new BufferedReader( new InputStreamReader(System.in), 1 ); String str = myReader,readLine(); if(str.length() >= 4){ System.out.println("たくさん"); } StringBuffer buf = new StringBuffer(str.length()*20); for(int i = 0;i < 20; i++){ buf.append(str); System.out.println(buf); } } } としたら、たくさんと表示されません。どこを修正すればいいでしょうか?ちなみにfor文とStringBufferクラスを用いてというのが条件です。

    • ベストアンサー
    • Java