2017-06-16 128 views
-1

我對Java很陌生,正在編寫一個從2維數組中隨機選擇一個元素的方法。'隨機'返回值不在數組中?

這個想法是,你給它一個由52張卡片組成的2維數組(4套房中的13張卡片),然後你隨機選擇其中的4張並返回它們的總和。

該程序似乎大部分工作正常,但有時它會返回卡「鑽石0」。這不是我給這個方法的數組中的一個元素,所以不太確定這裏發生了什麼。

我會重現最下方的相關代碼:

int [][] cards = {{2,3,4,5,6,7,8,9,10,11,12,13,14},{2,3,4,5,6,7,8,9,10,11,12,13,14}, 
      {2,3,4,5,6,7,8,9,10,11,12,13,14},{2,3,4,5,6,7,8,9,10,11,12,13,14}}; 
    int num1 = randomPick(cards); 
     sum = sum+num1; 

    switch(num1){ 
     case 11: System.out.print("Jack of "+ suite+", "); 
      break; 
     case 12: System.out.print("Queen of "+ suite+", "); 
      break; 
     case 13: System.out.print("King of "+ suite+", "); 
      break; 
     case 14: System.out.print("Ace of "+ suite+", "); 
      break; 
     default: System.out.print(num1+" of "+ suite+", "); 
      break;} 


    public static int randomPick(int[][] array){       
    int randrow = new Random().nextInt(array.length);    
    int randcol = new Random().nextInt(array[randrow].length);  
    switch (randrow){ 
    // Each row corresponds to a different suite of cards 
    case 1: 
     suite= "spades"; 
     break; 
    case 2: 
     suite = "hearts"; 
     break; 
    case 3: 
     suite = "diamonds"; 
     break; 
    case 0: 
     suite = "clubs"; 
     break; 
    }  
    int element =array[randrow][randcol]; 
    return(element);}  

正如你可以看到0是不是傳遞給方法的數組中的元素,它是如何有時返回0?

+2

您的一些示例代碼丟失 - 你粘貼不能編譯什麼。如果您共享[MCVE](https://stackoverflow.com/help/mcve),我們可以直接運行您的代碼並嘗試複製該問題。 – dimo414

+2

卡片有「套裝」,而不是「套裝」。 –

回答

1

如果在每次調用中向其傳遞相同的cards數組,則randomPick的上述實現將不返回0

它看起來像cards數組得到修改的地方下線和randomPick被更新的數組調用?我會建議在randomPick方法添加日誌記錄或sysout如果element是0,例如:

int element =array[randrow][randcol]; 
if(element == 0){ 
    for(int[] arrayElement : array){ 
     System.out.println(Arrays.toString(arrayElement)); 
    } 
}