2012-06-25 31 views
-2

我做了很多關於這個主題的搜索,但我找不到任何可用於我的問題:我正在基於一個整數數組在Java中進行一個簡單的內存遊戲。我希望數組只包含重複的條目並且沒有唯一的條目。不幸的是,這裏的大部分問題都涉及避免或刪除重複的條目,但是如何執行它們呢?Java:創建一個唯一的重複數組

我的代碼至今看起來像這樣。

public Field[] getField(){ 
    Random r = new Random(); 
    int pool = 16; 
    ArrayList<Integer> used = new ArrayList<Integer>(); 
    int rand = r.nextInt(pool); 
    System.out.println("First random: " + rand); 

    for(int i = 0; i < fields.length; i++){ 
     System.out.println("ITERATION " + i + " STARTED"); 
     while(used.contains(rand)){ 
      System.out.println(rand + " is used, recalculating..."); 
      rand = r.nextInt(pool); 
      System.out.println("New random is " + rand); 
     } 

     fields[i] = new Field(rand); 
     System.out.println(rand + " added in Field " + i); 

     int tmp = r.nextInt(fields.length - 1); 
     System.out.println("First tmp calculated: " + tmp); 

     while(fields[tmp] != null && i <= fields.length/2){ 
      tmp = r.nextInt(fields.length - 1); 
      System.out.println("Field " + tmp + " is used, looking for another..."); 
     } 

     fields[tmp] = new Field(rand); 
     System.out.println(rand + " added in temp Field " + tmp); 

     used.add(rand); 
     System.out.println("ITERATION " + i + " ENDED"); 
     System.out.println(); 
    } 

    return fields; 
} 

領域[]是類型字段(數組基本上只有一個成員(INT ID)。

+1

恩,怎麼會進入數組?如果它不在數組中,那麼它不能被添加,因爲它不是重複的。我認爲你需要更好地澄清你的目標。 –

+0

這是什麼代碼...你的嘗試?它似乎並沒有阻止將新的Field實例放入具有不同值的數組中。事實上,它似乎試圖爲數組中的每個項目提供不同的值!你做了很多搜索,但是你是否試圖思考? –

+0

我的想法是生成一個隨機數,並將其放入數組的第一個索引以及數組的另一個隨機索引中,該索引是空的。之後,下一個索引被選中並生成另一個隨機數。這個隨機數被放入數組的第二個索引(如果爲空),並放入另一個隨機索引(如果爲空)等等。我預計數組最後只能填充重複值。我的想法有問題嗎? – birdog

回答

1

如果我理解你正確地後在做什麼,我想你可能爲了促使變硬這個有很多比它必須是。

這是很容易遍歷您fields陣列並添加相同值兩Fields每次迭代,然後洗牌數組。類似下面的代碼:

{ 
    ... 
    for (int i = 0; i < fields.length; i += 2) 
     fields[i] = fields[i + 1] = new Field(r.nextInt(pool)); 

    shuffleFields(fields); 

    return fields; 
} 

你可以選擇洗牌算法。 Fisher-Yates shuffle是受歡迎的。例如:

void shuffleFields (Field[] fields) 
{ 
    Random r = new Random(); 
    for (int i = fields.length - 1; i >= 1; --i) 
    { 
     int j = r.nextInt(i + 1); 
     Field t = fields[i]; 
     fields[i] = fields[j]; 
     fields[j] = temp; 
    } 
} 
+0

這看起來比我的好得多。謝謝你和其他人的幫助。 :) – birdog

+0

@鳥:我很高興你欣賞答案! – Mac

相關問題