我正在使用以下方法,但是想知道是否有更好的算法来执行测试.有没有更好的方法呢?在C#中执行此操作但将语法放在一边,相信在OOP语言中算法将是相同的.谢谢.
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";
}
Run Code Online (Sandbox Code Playgroud)
Cru*_*her 11
if ((ComputerIn) % 3 + 1 == userInput)
return "Win";
else if ((userInput) % 3 + 1 == ComputerIn)
return "Lose"
else
return "Draw"
Run Code Online (Sandbox Code Playgroud)
如果你将3换成1(使用%),那么胜利者总是比失败者大1.
当你使用0-2时,这种方法更自然,在这种情况下我们会使用(ComputerIn+1)%3.我通过底涂来到了我的回答ComputerIn有ComputerIn-1,并UserInput与UserInput-1和简化的表达.
编辑,很长一段时间后看着这个问题.如上所述,如果在ComputerIn其他地方没有使用,并且仅用于确定赢/输/抽奖,那么这个方法实际上相当于:
if (ComputerIn == 1)
return "Win";
else if (ComputerIn == 2)
return "Lose"
else
return "Draw"
Run Code Online (Sandbox Code Playgroud)
这甚至可以进一步简化为
return new String[]{"Win", "Lose", "Draw"}[ComputerIn-1];
Run Code Online (Sandbox Code Playgroud)
由此得出的结果完全无法区分.除非随机生成的数字暴露在此方法之外.无论你的输入是什么,所有可能性总是有1/3的可能性.也就是说,你所要求的只是一种以相同概率返回"胜利","失败"或"平局"的复杂方式.