我正在使用下面的方法,这个方法很有效,但是我想知道是否有更好的算法来执行测试。有更好的办法吗在C语言中这样做,但是撇开语法不谈,相信在面向对象编程语言中算法是一样的。谢谢您。

public String play(int userInput)
        {   //ComputerIn is a randomly generated number between 1-3
            ComputerIn = computerInput();

            if (ComputerIn == userInput)
                return "Draw";

            else if (ComputerIn == 1 && userInput == 2)
                return "Win";

            else if (ComputerIn == 2 && userInput == 3)
                return "Win";

            else if (ComputerIn == 3 && userInput == 1)
                return "Win";

            else if (ComputerIn == 1 && userInput == 3)
                return "Lose";

            else if (ComputerIn == 2 && userInput == 1)
                return "Lose";

            else
                return "Lose";
        }

最佳答案

if ((ComputerIn) % 3 + 1 == userInput)
    return "Win";
else if ((userInput) % 3 + 1 == ComputerIn)
    return "Lose"
else
    return "Draw"

如果你用3比1(使用百分比)来包装,那么赢家总是比输家大1。
当您使用0-2时,这种方法更自然,在这种情况下,我们将使用(ComputerIn+1)%3。我通过将ComputerInComputerIn-1UserInputUserInput-1分开并简化表达式得出了我的答案。
编辑,看了很久这个问题。如前所述,如果ComputerIn不在其他任何地方使用,且仅用于确定胜负/平局,则此方法实际上相当于:
if (ComputerIn == 1)
    return "Win";
else if (ComputerIn == 2)
    return "Lose"
else
    return "Draw"

这甚至可以进一步简化为
return new String[]{"Win", "Lose", "Draw"}[ComputerIn-1];

由此产生的结果完全无法区分除非随机生成的数字暴露在该方法之外不管你的意见是什么,总有三分之一的可能性。也就是说,你所要求的,只是一种以同样的概率返回“赢”、“输”或“平”的复杂方式。

09-05 10:25