簡體   English   中英

請幫助我理解這段代碼

[英]Please help me understand this piece of code

我有一個為學校完成的Java項目。 這是一段代碼,我很難理解它的邏輯。 請闡明一下。

for(int i = 0; i< leftbut.length; i++){
          int randomNumber =(int)(Math.random()*leftbut.length);
             tempNum = leftbut[randomNumber];
            leftbut[randomNumber] = leftbut[i];
            leftbut[i]=tempNum;      

     }

在這種情況下,左側按鈕實際上是9個按鈕的數組。 該代碼應該在9個按鈕的不同位置進行混洗。 我只是不明白這段代碼是如何工作的。

該代碼生成原始數組的隨機排列

但是,請注意,這是有偏見的-它不會以均勻分布生成所有排列。 該主題討論了這種偏見的影響。

為了解決這個問題,您可能需要看一下費舍爾·耶茨的混洗 (主要區別是,在每次迭代中都將生成范圍為[i,n]的隨機數,而不是范圍為[0,n]。)


編輯:
如果將分配封裝在方法中,則可能會更好地理解它:

private static void swap(int[] array, int i, int j) { 
       tempNum = array[j];
       array[j] = array[i];
       array[i]=tempNum; 
}

現在,代碼將變得更簡單:

for(int i = 0; i< leftbut.length; i++) {
          //choose a random index in the array
          int randomNumber =(int)(Math.random()*leftbut.length);
          //swap the element in index i with the random element chosen in the array
          swap(leftbut, i, randomNumber);
}

這個想法是您用隨機索引對數組中的每個元素進行swap() 從數組中隨機選擇此隨機索引,其索引表示為randomNumber
由於只swap()周圍的項目,因此可以輕松證明輸出數組是原始數組的置換。

它僅9次隨機交換為leftbut數組的元素。

for(int i = 0; i< leftbut.length; i++){

是一個循環,它將變量i初始化為0,並在每個循環中將其遞增1

int randomNumber =(int)(Math.random()*leftbut.length);

聲明整數變量randomNumber並分配范圍為0的隨機值-數組長度

 tempNum = leftbut[randomNumber];         
 leftbut[randomNumber] = leftbut[i];
 leftbut[i]=tempNum;  

這實際上反轉了數組中2個按鈕的位置,值i變為隨機值1,反之亦然

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM