“随机”返回值不在数组中?

时间:2017-06-16 21:55:24

标签: java arrays random

我是Java的新手,正在编写一个从2维数组中随机选择元素的方法。

这个想法是你给它一个52维卡的二维数组(4个套件中的13张卡),然后你随机选择其中的4个并返回它们的总和。

该程序似乎在大多数情况下都能正常工作,但有时它会返回卡片“0 of diamond”。这不是我给出方法的数组中的一个元素,所以不太清楚这里发生了什么。

我将重现以下大部分相关代码:

    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?

1 个答案:

答案 0 :(得分:1)

如果在每次调用中向其传递相同的randomPick数组,0的上述实现将不会返回cards

看起来cards数组在某个地方被修改,randomPick被更新的数组调用?如果sysout为0,我建议在randomPick方法中添加日志记录或element,例如:

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