- ベストアンサー
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++; } } }*/ } }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
//コードの真ん中あたり 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 だよね
その他の回答 (2)
- Sephy
- ベストアンサー率35% (7/20)
眠い目擦りながらの回答なので期待しないでください。。。 40行目(int m = 0;の直後)の for(int i=0; i<90; i++) を for(int i=0; i<k; i++) に書き換えました。 <根拠> hairetu3の有効な要素数を変数kが保持しているので、その範囲だけ調べればいいのでは?と思ったので。
- wogota
- ベストアンサー率42% (66/154)
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など動的に確保する方法も いいのかもしれません)
お礼
回答ありがとうございます。同じ値は90よりはどうしても少なくなりますよね(^^;hairetu3には0から90個の値ではないですか?ではintの初期値を1に設定すればいいですかね?
お礼
あ、そうです(^^;ありがとうございます。