2017-04-02 16 views
0

数字の1から10までのランダムな順列を生成するプログラムを作成する必要があります。可能であれば、メソッドや追加ライブラリはありません。できるだけ単純です。ここまで私がこれまで持っていたことがあります。2番目の配列はランダムです

import java.util.Scanner; 
public class SwitchingNum { 
public static void main(String[] args) { 
    int num = 10; 
    Scanner in = new Scanner(System.in); 
    int[] tempArray = new int[10]; 
    int currentSize = tempArray.length; 
    System.out.print("First Array: "); 
    for(int i = 0; i < num; i++){ 
     tempArray[i] = i + 1; 
     System.out.print(tempArray[i] + " "); 
    } 
    int[] permArray = new int[tempArray.length]; 
    System.out.println(); 
    System.out.print("Second Array: "); 
    for (int i = 0; i < permArray.length; i ++){ 
     permArray[i] = tempArray[(int) (Math.random() * currentSize -1)]; 
     for (int j = i; j < currentSize -1; j++){ 
      tempArray[i] = tempArray[i+1]; 
     } 
     currentSize--; 
     System.out.print(permArray[i] + " "); 
    } 
} 
} 
+0

ここにあなたが必要なものを説明する役に立つビデオがあります:https://youtu.be/U0nvXHh7o-w?t=4m36s – Ain

+1

あなたの現在の解は一様ではなく、O(n^2)です。 – Ain

+0

[Generate an uniform random permutation]の可能な複製(http://stackoverflow.com/questions/7902391/generate-an-uniform-random-permutation) – Leon

答えて

0

アレイをシャッフルする簡単な方法は、Fisher–Yates shuffleです。ちょうどあなたのpermArrayに元の配列をコピーして実行します。

Random rand = new Random(); 
for(int i = 0; i < permArray.length - 1; i++) { 
    int swapPosition = rand.nextInt(permArray.length - i) + i; 
    int tmp = permArray[i]; 
    permArray[i] = permArray[swapPosition] 
    permArray[swapPosition] = tmp; 
} 

java.util.Randomをインポートすることを忘れないでください。詳細はthis questionをご覧ください。

関連する問題