• ベストアンサー

0が表示されてしまいます

次のようなプログラムを作成し、3つの配列の共通部分を表示したいのですが、うまく表示されず0が何個も表示されました。おかしい部分は/**/で囲みましたので、なぜ0が表示されるのかわかる方いましたら教えてください。お願いします。 import java.util.*; import java.lang.*; public class hairetu { public static void main(String[] args) { Random generator = new Random(); int hairetu[] = new int[90]; for(int i=0; i<90; i++) { hairetu[i] = (int)(Math.random() * 450); } int hairetu2[] = new int[90]; for(int i=0; i<90; i++) { hairetu2[i] = (int)(Math.random() * 450); } int hairetu3[] = new int[90]; int k = 0; for(int i=0; i<90; i++) { for(int j=0; j<90; j++) { if(hairetu[i] == hairetu2[j]) { hairetu3[k] = hairetu[i]; System.out.println(hairetu3[k]); k++; } } } System.out.println("\n---------------------------------\n"); int hairetu4[] = new int[90]; for(int i=0; i<90; i++) { hairetu[i] = (int)(Math.random() * 450); } /* int hairetu5[] = new int[90]; int m = 0; for(int i=0; i<90; i++) { for(int j=0; j<90; j++) { if(hairetu3[i] == hairetu4[j]) { hairetu5[m] = hairetu3[i]; System.out.println(hairetu5[m]); m++; } } }*/ } }

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

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.2

//コードの真ん中あたり System.out.println("\n---------------------------------\n"); int hairetu4[] = new int[90]; for(int i=0; i<90; i++) { hairetu[i]=(int)(Math.random()*450);//←おかしいでしょ! } //左辺は、hairetu でなく hairetu4 だよね

mos21
質問者

お礼

あ、そうです(^^;ありがとうございます。

その他の回答 (2)

  • Sephy
  • ベストアンサー率35% (7/20)
回答No.3

 眠い目擦りながらの回答なので期待しないでください。。。  40行目(int m = 0;の直後)の for(int i=0; i<90; i++)  を for(int i=0; i<k; i++)  に書き換えました。 <根拠>  hairetu3の有効な要素数を変数kが保持しているので、その範囲だけ調べればいいのでは?と思ったので。

  • wogota
  • ベストアンサー率42% (66/154)
回答No.1

hairetuとhairetu2で同じ値のものをhairetu3に代入する ものですが、入れることの出来た値の回数が90より少ないからでしょうか、 javaではint型を定義したとき0が初期値となりますので。 そして、hairetu4に設定した乱数の中に0が含まれている場合に 結構多数の0が表示されることになると思われます。 というより、このプログラムでは、hairetu3に入る個数が 90を超えることは十分に考えられ、超えた場合は例外が 発生してしまいます。 hairetu3[ 90* 90]と宣言し、後のhairetu3とhairetu4の 比較ではhairetu3についてfor( i=0; i<k; i++)とするなどの 対処が必要になると思います。 (その場合、先と同じ理由でhairetu5[90*90*90]にする等の 対処が必要になると思います。90*90*90(=729000)は 結構大きい数なのでVectorなど動的に確保する方法も いいのかもしれません)

mos21
質問者

お礼

回答ありがとうございます。同じ値は90よりはどうしても少なくなりますよね(^^;hairetu3には0から90個の値ではないですか?ではintの初期値を1に設定すればいいですかね?

関連するQ&A