Java 尽量减少if语句的使用
我试图在下面的if语句中尽可能地最小化条件语句,如何实现它Java 尽量减少if语句的使用,java,if-statement,Java,If Statement,我试图在下面的if语句中尽可能地最小化条件语句,如何实现它 if(safeHalFromCros == true){ System.out.println("Crossbowman cannot win, Halbedier out of range"); if(speedHalToCav < speedCavToCros){ halberdier.setXPos(cavalier.getXPos()); ha
if(safeHalFromCros == true){
System.out.println("Crossbowman cannot win, Halbedier out of range");
if(speedHalToCav < speedCavToCros){
halberdier.setXPos(cavalier.getXPos());
halberdier.setYPos(cavalier.getYPos());
System.out.printf("***The winner is: %3s:\n",halberdier.toString());
}else{
cavalier.setXPos(crossBowMan.getXPos());
cavalier.setYPos(crossBowMan.getYPos());
System.out.printf("***The winner is %3s:\n",cavalier.toString());
crossBowMan.setXPos(-1.0);
crossBowMan.setYPos(-1.0);
}
}else{
System.out.println("Crossbowman has a chance to win, Halbedier is within range");
if(speedCrosToHal < speedHalToCav && speedCrosToHal < speedCavToCros){
System.out.println("Printing out the speeds for testing purposes");
System.out.println("Speed of crossbowman to halberdier is: "+speedCrosToHal);
System.out.println("Speed of halbedier to cavalier is: "+speedHalToCav);
System.out.println("Speed of cavalier to crossbowman is: "+speedCavToCros);
halberdier.setXPos(-1.0);
halberdier.setYPos(-1.0);
System.out.printf("***The winner is %3s:\n",crossBowMan.toString());
}
}
if(safeHalFromCros==true){
System.out.println(“弩手无法获胜,哈尔贝迪耶超出射程”);
if(speedHalToCav
您需要使用开闭原则或策略模式您需要使用开闭原则或策略模式使用:Java中的运算符(如果您不想使用“if”-尽管实现相同)使用?:Java中的运算符(如果您不想使用“if”-尽管实现是相同的)我认为您的代码很好。但是,如果您的代码是一个完整的方法(而不仅仅是方法的一部分),则可以使用这种技术。再说一次,这不是我在这里要做的,但有时它会非常有用
if(!safeHalFromCros) {
System.out.println("Crossbowman has a chance to win, Halbedier is within range");
//...
return;
}
if(speedHalToCav < speedCavToCros){
//...
System.out.printf("***The winner is: %3s:\n",halberdier.toString());
return;
}
//...
System.out.printf("***The winner is %3s:\n",cavalier.toString());
if(!safeHalFromCros){
println(“弩手有机会获胜,哈尔贝迪耶在射程之内”);
//...
返回;
}
if(speedHalToCav
我认为您的代码是正确的。但是,如果您的代码是一个完整的方法(而不仅仅是方法的一部分),则可以使用这种技术。再说一次,这不是我在这里要做的,但有时它会非常有用
if(!safeHalFromCros) {
System.out.println("Crossbowman has a chance to win, Halbedier is within range");
//...
return;
}
if(speedHalToCav < speedCavToCros){
//...
System.out.printf("***The winner is: %3s:\n",halberdier.toString());
return;
}
//...
System.out.printf("***The winner is %3s:\n",cavalier.toString());
if(!safeHalFromCros){
println(“弩手有机会获胜,哈尔贝迪耶在射程之内”);
//...
返回;
}
if(speedHalToCav
除了safeHalFromCross==true之外,没有任何东西会立即弹出到我的面前
可以简化为safeHalFromCross
。我不认为你可以减少那些if
s,但这也取决于你的总体代码设计,这将有点太大而无法解决。如何最小化?3if
并不过分,特别是如果各个分支中的子句没有“重叠”。这是家庭作业要求吗?这没什么不好的,但这有助于让人们知道你在处理一个预定义的限制,而不是个人偏好。我建议向codereview姐妹网站发送类似的问题。除了safeHalFromCross==true
之外,没有任何东西会立即出现在我面前。我不认为你可以减少那些if
s,但这也取决于你的总体代码设计,这将有点太大而无法解决。如何最小化?3if
并不过分,特别是如果各个分支中的子句没有“重叠”。这是家庭作业要求吗?这没什么不好的,但这有助于让人们知道你在处理一个预定义的限制,而不是个人偏好。我建议向codereview姐妹网站DownVoting发送类似的问题,因为答案目前没有回答OP的问题,并且没有进一步解释OCP或SP带来了什么,这并不比“查阅这些术语,看看你是否学到了什么”好。一句话的答案应该是,好的,回答这个问题。尽管我对这两个概念都很熟悉(OP可能不熟悉),但我并不认为它们立即适用。如果您编辑您的答案,提供一些如何将这些原则应用于当前问题的示例,我可能会投赞成票,或者取消我的反对票。调用设计模式名称的巨大威力本身并不是答案。评论要文明,不要说别人没受过教育。我知道你不想过火,但是。。。也许你认为有一个博客在解释OCP/战略模式方面做得特别出色?提供与可靠消息来源的链接对寻求答案的人仍然有帮助。也许您可以提供一个小例子,说明如何将OCP用于OP的问题或类似类型的问题?你不必教OP关于OCP的所有知识。在“你应该使用数组”和“这里有一个超级深入的、基本上不相关的数组解释”之间有一个中间立场。策略模式-@coderealm:不要把它们作为评论发布,而是编辑你的答案。当你在做的时候,编辑你的答案,解释为什么这些模式与OP的问题相关。如果你这样做的话,我可能会恢复我的投票。向下投票,因为目前的答案并没有回答OP的问题,并且没有进一步解释OCP或SP带来了什么,并不比“查找这些术语,看看你是否学到了什么”。一行回答应该回答问题