2017-04-05 81 views
0

我想複製一個更大的數組,將一些元素通過remove()方法隨機刪除到一個小數組中。Java如何將較大的數組複製到小數組?

我已使用System.arraycopy(),但此方法分別複製元素。因此較大陣列中的某些元素不會被複制。

我想將較大的數組的所有未移除的元素複製到小數組中,其長度等於較大數組中未移除元素的數量。

+0

爲什麼不隨機*將大數組中的元素添加到小數組中? – CraigR8806

+0

感謝您的回答。這真的是個好主意,但我剛剛嘗試過,我無法做到。你能告訴我該怎麼做嗎? –

+0

歡迎來到Stack Overflow。通常我們要求提問者首先顯示一個嘗試,或者至少記錄搜索和研究的完成。這不是嚴格的,因爲當我們更清楚地瞭解你面臨的挑戰時,指導你更容易。 –

回答

0
import java.util.concurrent.ThreadLocalRandom; //for shuffling array 
import java.util.Random;      //for shuffling solution 

public class BigToSmallArray { 
    public static void main(String[] args) { 
     int[] bigArray = new int[]{0,1,2,3,4,5,6,7,8,9}; 
     int[] smallArray = new int[5]; 
     int[] shuffledBigArray = shuffleArray(bigArray); 
     for(int i = 0; i < smallArray.length; i++) { 
      smallArray[i] = shuffledBigArray[i]; 
     } 
    } 

    public static int[] shuffleArray(int arr[]) { 
     Random rnd = ThreadLocalRandom.current(); 
     for (int i = arr.length - 1; i > 0; i--) { 
      int index = rnd.nextInt(i + 1); 
      // Simple swap 
      int a = arr[index]; 
      arr[index] = arr[i]; 
      arr[i] = a; 
     } 
     return arr; 
    } 
} 
+0

感謝您的幫助。這對我有用:) –

+0

@ M.Aktas沒問題。祝你好運:) – noobcoder

+0

@ M.Aktas或者,如果你轉換爲使用ArrayLists,這是一種混洗ArrayList中的元素的方法,但我不記得確切的方法名稱,你可以在API上查找它。 – noobcoder

0

如果你被允許使用其他的「系統庫」,解決方法是超簡單:

  • Shuffle大陣列(或它的一個副本;如果你要保持大陣列是)
  • 使用arraycopy()largersmaller.length元素複製到smaller

的一點是:當你洗牌的大陣,你把它變成隨機順序!

但如果你是而不是允許使用「系統」庫;你「洗牌」自己:

  • iterate larger;並且對於每次迭代,計算隨機INT larger.length
  • 交換內的當前迭代的元件與該隨機選擇的索引

之後,可以再次使用arraycopy。

+0

請問您可以展示代碼嗎?我無法正確理解。 –

+0

我沒有故意顯示代碼。我認爲這是某種功課;而你不會從其他人那裏學習做功課。但我也增加了另一個建議,這可以歸結爲兩行代碼... – GhostCat