2011-10-29 13 views
1

私はarrと呼ばれる配列を15要素用に配置しています。 1から15までの数字をランダムな順序で配列に配置する必要があります。 これは私が試したものです:Java:ランダムintの配列を作成する(intは一度しか使用できません)

int[] arr = new int[15]; 
int i,j,k,n; 

for (i = 0; i<15; i++) { 
    for (j=0; j<15; j++) { 
     n = (int)(Math.random() * 14 + 1); 
     if (rij[j] != n) { 
      rij[i] = n; 
      break; 
     } 
    } 
} 

ありがとう! :)

+1

そして、あなたがしたいことはありますか? –

+0

いいえ、それ以外の場合は投稿しません:p – gieldops

+0

問題は、コンパイル時エラー、例外、エラーメッセージ、間違った結果(入力、出力、期待通りの出力)、結果はありません... –

答えて

11

ArrayListを使用し、15

Shuffleリストに番号1でそれを埋めます。

arrayに変換してください。

+0

ああ、あなたは同じ考えを持っていました:-) –

+0

ありがとう!それは宿題 – gieldops

6

この

// Create an ordered list 
List<Integer> list = new ArrayList<Integer>(); 
for (int i = 1; i < 16; i++) { 
    list.add(i); 
} 

// Shuffle it 
Collections.shuffle(list); 

// Get an Integer[] array 
Integer[] array1 = list.toArray(new Integer[list.size()]); 

// Get an int[] array 
int[] array2 = new int[list.size()]; 
for (int i = 0; i < list.size(); i++) { 
    array2[i] = list.get(i); 
} 
0

のようにそれを実行してくださいそれはあなたと罰金だ場合、これは、ランダムにInteger[]でシャッフル要素を残します:

List<Integer> list = new ArrayList<Integer>(); 
for (int i = 0; i < 15; i++) 
    list.add(i + 1); 

Collections.shuffle(list); 
Integer[] arr = list.toArray(new Integer[0]); 
0

を、私はこのような何かを行います。

まず最初から最後まで数字でいっぱいの一時的なarraylistを作成し、ランダムな数字を選択して配列にコピーし、それをtemp arraylistから取り除いてからuntiを繰り返しますl arraylistは空です...

ArrayList<Integer> arr = new ArrayList<Integer>(); 
    int[] arr2 = new int[15]; 
    int i,j,k,n; 

    for (i=0;i<15;i++) arr.add(i+1); 
    i=0; 
    while(arr.size()>0){      
     n = (int)(Math.random() * (14 + 1 - i)); 
     arr2[i]=arr.get(n); 
     arr.remove(n); 
     i++; 
    } 
7

これは宿題(またはインタビューの質問ですか?)のようです。その場合、Javaコレクションオブジェクトの組み込みメソッドではなく配列を使用する必要があります(実際にはそうでない場合でも)。答えはFisher-Yates Shuffle algorithm

現代インプレースシャッフルは

です。
To shuffle an array a of n elements (indexes 0..n-1): 
for i from n − 1 downto 1 do 
    j ← random integer with 0 ≤ j ≤ i 
    exchange a[j] and a[i] 

(私は確認する必要がありますが、これはJavaがフードのshuffle()メソッドで使用しているものと思われます)。

編集、それはアルゴリズムを実装するのも楽しいですので: Javaで

、これは次のようになります。

public static void main(String[] args) { 

    int[] a = new int[15]; 
    for (int i = 1; i <= 15; i++) 
    { 
     a[i-1] = i; 
    } 

    Random rg = new Random(); 
    int tmp; 
    for (int i = 14; i > 0; i--) 
    { 
     int r = rg.nextInt(i+1); 
     tmp = a[r]; 
     a[r] = a[i]; 
     a[i] = tmp; 
    } 

    for (int i = 0; i < 15; i++) 
     System.out.print(a[i] + " "); 

    System.out.println(); 


} 

そして...これはさらにALGOのインサイドアウトバージョンを使用して最適化することができます既知の一連の数値をランダムな順序で挿入したいからです。 ArrayListを作成し、の配列にコピーアウトするなどの余分なコピーがないので、あなたがしたいことを達成するための最良の方法は次のとおりです。

a = new int[15]; 
Random rg = new Random(); 
for (int i = 0; i < 15; i++) 
{ 
    int r = rg.nextInt(i+1); 
    a[i] = a[r]; 
    a[r] = i+1; 
} 
+0

のように動作します:) – gieldops

+0

まだ感謝! – gieldops

+0

いずれにしても、それはあなたがそれをする方法を理解するために探しているアルゴです。 –

関連する問題