计算满屋不工作的方法

时间:2013-03-27 22:17:18

标签: java if-statement methods

这是我使用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;
}

3 个答案:

答案 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。