这是我使用5个模具计算满屋的代码。现在一些数字会起作用,例如我滚动1,6,6,6,1。但是如果我滚动4,4,5,5,4。它将无法工作,我不知道。我知道有很多if语句,它可以做得更好,但我是一个初学程序员,这是我觉得很自在,因为我不能做一个复杂的逻辑算法。谢谢。
Arrays.sort(die);
int score = 0;
int d1 = die[0];
int d2 = die[1];
int d3 = die[2];
int d4 = die[3];
int d5 = die[4];
if (d1 == 1)
{
if (d1 == 1 && d2 == 1)
{
if (d3 == 2 && d4 == 2 && d5 == 2)
{
score = 25;
}
if (d3 == 3 && d4 == 3 && d5 == 3)
{
score = 25;
}
if (d3 == 4 && d4 == 4 && d5 == 4)
{
score = 25;
}
if (d3 == 5 && d4 == 5 && d5 == 5)
{
score = 25;
}
if (d3 == 6 && d4 == 6 && d5 == 6)
{
score = 25;
}
}
else if (d1 == 1 && d2 == 1 && d3 == 1)
{
if (d4 == 2 && d5 == 2)
{
score = 25;
}
if (d4 == 3 && d5 == 3)
{
score = 25;
}
if (d4 == 4 && d5 == 4)
{
score = 25;
}
if (d4 == 5 && d5 == 5)
{
score = 25;
}
if (d4 == 6 && d5 == 6)
{
score = 25;
}
}
}
if (d1 == 2)
{
if (d1 == 2 && d2 == 2)
{
if (d3 == 3 && d4 == 3 && d5 == 3)
{
score = 25;
}
if (d3 == 4 && d4 == 4 && d5 == 4)
{
score = 25;
}
if (d3 == 5 && d4 == 5 && d5 == 5)
{
score = 25;
}
if (d3 == 6 && d4 == 6 && d5 == 6)
{
score = 25;
}
}
else if (d1 == 2 && d2 == 2 && d3 == 2)
{
if (d4 == 3 && d5 == 3)
{
score = 25;
}
if (d4 == 4 && d5 == 4)
{
score = 25;
}
if (d4 == 5 && d5 == 5)
{
score = 25;
}
if (d4 == 6 && d5 == 6)
{
score = 25;
}
}
}
if (d1 == 3)
{
if (d1 == 3 && d2 == 3)
{
if (d3 == 4 && d4 == 4 && d5 == 4)
{
score = 25;
}
if (d3 == 5 && d4 == 5 && d5 == 5)
{
score = 25;
}
if (d3 == 6 && d4 == 6 && d5 == 6)
{
score = 25;
}
}
else if (d1 == 3 && d2 == 3 && d3 == 3)
{
if (d4 == 4 && d5 == 4)
{
score = 25;
}
if (d4 == 5 && d5 == 5)
{
score = 25;
}
if (d4 == 6 && d5 == 6)
{
score = 25;
}
}
}
if (d1 == 4)
{
if (d1 == 4 && d2 == 4)
{
if (d3 == 5 && d4 == 5 && d5 == 5)
{
score = 25;
}
if (d3 == 6 && d4 == 6 && d5 == 6)
{
score = 25;
}
}
else if (d1 == 4 && d2 == 4 && d3 == 4)
{
if (d4 == 5 && d5 == 5)
{
score = 25;
}
if (d4 == 6 && d5 == 6)
{
score = 25;
}
}
}
if (d1 == 5)
{
if (d1 == 5 && d2 == 5)
{
if (d3 == 6 && d4 == 6 && d5 == 6)
{
score = 25;
}
}
else if (d1 == 5 && d2 == 5 && d3 == 5)
{
if (d4 == 6 && d5 == 6)
{
score = 25;
}
}
}
return score;
}
else
return 0;
}
答案 0 :(得分:3)
首先 - {4,4,4,5,5}不起作用的原因是这个结构:
if (d1 == 4)
{
if (d1 == 4 && d2 == 4)
{
// ...
}
else if (d1 == 4 && d2 == 4 && d3 == 4)
{
// ...
}
}
永远不会运行第二个...
:第二个条件只有在满足第一个条件的情况下才会满足。
最小修复是重新排序这两个if
- 块。
更好的解决方法是,不要将所有这些骰子与固定值进行比较,而是将它们相互比较。你已经有了Arrays.sort(die)
,这是一个好主意。完成后,您只需写下以下内容即可检测到满堂红:
if (d1 == d5)
{
// five of a kind
}
else if ((d1 == d2 && d3 == d5) || (d1 == d3 && d4 == d5))
{
// full house
}
你明白为什么吗?
答案 1 :(得分:1)
我会这样解决:
Arrays.sort(die);
Set<Integer> set = new HashSet<>();
for (int i : die) {
set.add(i);
}
boolean isFullHouse = (set.size() == 2) && (die[0] == die[1]) && (die[3] == die[4]);
如果您只有2个不同的数字, isFullHouse
将是true
,而在排序数组中,第一个等于第二个,第二个最后一个与最后一个相同。
这可以避免所有if
,并且不是一个复杂的逻辑算法,它是一种简单的逻辑算法。
答案 2 :(得分:0)
通过检查所有骰子值,您几乎肯定会丢失案例。
这就是我要做的事情:
取第一个值并计算你的骰子数等于该值。 如果有第二个值,则计算您的骰子中有多少等于该值。 如果2个计数分别为2和3(或3和2),那么你可以得到满堂红。
这看起来像是Yahtzee,所以这样的算法可以很容易地修改为三种类型,四种类型和Yahtzee。