我是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?
答案 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));
}
}