2012-12-09 199 views
-2

我正在嘗試使Array包含10個不同的整數0-9。 我有這樣的:Java邏輯陣列故障

for (int i = 0; i < perm.length; i++) 
{ 
    int num = (int) (Math.random() * 9); 
    boolean check = true; 

    if (Arrays.asList(perm).contains(num) == true) 

     check = false; 
     else 
      { 
      check = true; 
      perm[i] = num; 
      } 

while (check == false) 
{ 
    num = (int) (Math.random() * 9); 

    } 
} 

看來,它應該工作,並與不同的整數數組,但事實並非如此。

+1

「但它沒有」;你可以說得更詳細點嗎? –

+0

perm.length究竟等於什麼?另外,如果檢查== true,while循環是無限循環。 –

+0

perm.length是10.當我說「它不」我的意思是我寫的代碼不能正常工作,我打算如何和一些數字仍然在數組中重複。 – user1729448

回答

1

如果你想避免創建一個列表你可以自己洗牌:

Random random = new Random(); 
    int[] perm = new int[10]; 
    for (int i = 0; i < 10; i++) { 
     perm[i] = i; 
    } 
    for (int i = 0; i < 9; i++) { 
     int j = random.nextInt(10 - i); 
     int tmp = perm[i]; 
     perm[i] = perm[i + j]; 
     perm[i + j] = tmp; 
    } 
    System.out.println(Arrays.toString(perm)); 
+0

我必須使用Math.random()生成器來填充數組。 – user1729448

+1

@ user1729448,所以只需使用它。不要懶得複製粘貼。 –

+0

對Random的調用可以很容易地用(int)(Math.random()*(10-i))替代(隨機類更容易) – bowmore

0

這聽起來像你試圖產生從0到8(9?)的數字排列。最簡單的方法是按順序用數字填充數組列表,然後使用Collections.shuffle()

1

這個怎麼樣,而不是(如果你想有一個更簡潔的方法):

List<Integer> l = new ArrayList<Integer>(); 
for (int i = 0; i < 10; i++) 
    l.add(i); // add 0-9 
Collections.shuffle(l) 

Integer[] ints = l.toArray(new Integer[10]); 

所有我們在這裏所做的創建列表,與整數0-9加油吧,洗牌它和寫作將內容添加到數組中。


如果你想更多的「手動」的做法,我建議是這樣的:

List<Integer> l = new ArrayList<Integer>(); 
for (int i = 0; i < 10; i++) 
    l.add(i); // add 0-9 

int[] ints = new int[10]; 
for (int i = 0 ; i < 10; i++) 
    ints[i] = l.remove((int)(Math.random() * l.size())); 

System.out.println(Arrays.toString(ints)); 
 
[7, 2, 3, 4, 9, 6, 0, 1, 8, 5] 

我假設你被允許使用列表,因爲您發佈的代碼包括致電Arrays.asList

+0

我知道這樣會更容易,但我們不能使用我們還沒學過的東西。因此我必須使用'Math.random()'生成器來填充數組。 – user1729448

+0

@ user1729448查看我的編輯 – arshajii

+0

我們實際上並沒有被允許使用'Lists'。我只是想看看我能否先讓它工作然後調整它。無論如何去做就像你沒有'Lists'那樣做? – user1729448