- 締切済み
Randomクラスを使い同じ値をもつことがないように
するには? サンプルコードをどう改良したらいいですか 例えば{1,3,5,5,3,2}の連続した5とならないようにするには? import java.util.*; class Sample6_9{ public static void main(String args[]){ Scanner std = new Scanner(System.in); Random rand = new Random(); System.out.print("要素数:"); int n = std.nextInt(); int[]a = new int[n]; for(int i=0;i<n;i++){ a[i] = 1+rand.nextInt(10); System.out.println("a["+i+"]="+a[i]); } } }
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- _ranco_
- ベストアンサー率58% (126/214)
いちばん楽で簡単なのは、java.util.Collections.shuffle()メソッドを使うことです。
- _ranco_
- ベストアンサー率58% (126/214)
3が二つあるのはいいの?
- auty
- ベストアンサー率58% (284/486)
入力されたn個の要素数を持つ配列selected[]を作りました。 ------------------------------------------------------------------------------ import java.util.*; public class Rand2 { static int maxcount = 10; static int[] a = new int[maxcount]; public static void main(String args[]) { for (int i = 0; i < maxcount; i++) a[i] = i + 1; Scanner std = new Scanner(System.in); System.out.print("要素数:"); int n = std.nextInt(); if (maxcount < n) { System.out.println("maxcount:" + maxcount); return; } int selected[] = new int[maxcount]; int selectIndex = 0; for (int i = 0; i < n; i++) { int len = maxcount - i; selectIndex = rand1(len, selected, selectIndex); // len:今回チェックする配列長 System.out.println("selected[" + i + "]=" + selected[i]); } } static int rand1(int len, int selected[], int selIndex) { Random rand = new Random(); int index = rand.nextInt(len); selected[selIndex++] = a[index]; // ランダム値の追加 while (index < len - 1) a[index] = a[++index]; // ずらす。 return selIndex; } }
お礼
とりあえずコピーして実行してみました。 本で出た演習だったのでautyさんの解答でも 正解と思いますが、まだまだ未熟者なのでもっと 簡単に書けるように頑張ります。 ありがとうございます。
お礼
3もふたつ出ないようにするには? 気にかけてもらいありがとうございます。