我正在制作Java yahtzee游戏,我只是想知道以下代码在任何情况下是否都会产生误报
die是一个数组,其中包含每个模具的伪随机(Math.random())数字,我已经使用冒泡排序对它们进行了排序
例如:
如果在{1,2,1,2,1)处随机抛出死,则将它们排序为{1,1,1,2,2},然后由下面的代码检查,该代码位于返回布尔值的方法内部。
int count = 0;
if(die[0] == die[1] && die[1] == die[2] || die[0] == die[1] && die[2] != die[1]){
count++;
}
if(die[3] == die[4]){
count++;
}
if(count > 1){
return true;
}
return false;
最佳答案
它比排序然后测试要复杂得多。它也比较慢。尝试此操作,计算每个数字出现的次数,并检查是否有3和2。您无需先对数组进行排序。
int[] counts = new int[6];
for (int i=0; i<die.length; i++)
//increase the relevant counter
counts[die[i]-1]++;
//now check we've got a 2 and a 3
boolean check2 = false;
boolean check3 = false;
for (int i: counts) {
check2 |= (i==2); //found 2 of some number
check3 |= (i==3); //found 3 of some number
}
return (check2 && check3);
请注意,这将为所有五个相同的Yahtzee返回
false
。如果要返回check5
,添加一个true
足以满足此要求。 (确实应该返回true
,因为如果您愿意,可以将Yahtzee算作满屋子。)然后它将变成:int[] counts = new int[6];
for (int i=0; i<die.length; i++)
//increase the relevant counter
counts[die[i]-1]++;
//now check we've got a 2 and a 3
boolean check2 = false;
boolean check3 = false;
for (int i: counts) {
check2 |= (i==2); //found 2 of some number
check3 |= (i==3); //found 3 of some number
if (i==5) return true; //found a Yahtzee so stop and return true
}
return (check2 && check3);
顺便说一句,即使您不会注意到只有五个元素的数组的效率低下,您也绝对不应该对任何对象使用冒泡排序。
关于java - java yahtzee游戏检查满屋,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26265708/