Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尽量减少if语句的使用_Java_If Statement - Fatal编程技术网

Java 尽量减少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语句中尽可能地最小化条件语句,如何实现它

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,但这也取决于你的总体代码设计,这将有点太大而无法解决。如何最小化?3
if
并不过分,特别是如果各个分支中的子句没有“重叠”。这是家庭作业要求吗?这没什么不好的,但这有助于让人们知道你在处理一个预定义的限制,而不是个人偏好。我建议向codereview姐妹网站发送类似的问题。除了
safeHalFromCross==true
之外,没有任何东西会立即出现在我面前。我不认为你可以减少那些
if
s,但这也取决于你的总体代码设计,这将有点太大而无法解决。如何最小化?3
if
并不过分,特别是如果各个分支中的子句没有“重叠”。这是家庭作业要求吗?这没什么不好的,但这有助于让人们知道你在处理一个预定义的限制,而不是个人偏好。我建议向codereview姐妹网站DownVoting发送类似的问题,因为答案目前没有回答OP的问题,并且没有进一步解释OCP或SP带来了什么,这并不比“查阅这些术语,看看你是否学到了什么”好。一句话的答案应该是,好的,回答这个问题。尽管我对这两个概念都很熟悉(OP可能不熟悉),但我并不认为它们立即适用。如果您编辑您的答案,提供一些如何将这些原则应用于当前问题的示例,我可能会投赞成票,或者取消我的反对票。调用设计模式名称的巨大威力本身并不是答案。评论要文明,不要说别人没受过教育。我知道你不想过火,但是。。。也许你认为有一个博客在解释OCP/战略模式方面做得特别出色?提供与可靠消息来源的链接对寻求答案的人仍然有帮助。也许您可以提供一个小例子,说明如何将OCP用于OP的问题或类似类型的问题?你不必教OP关于OCP的所有知识。在“你应该使用数组”和“这里有一个超级深入的、基本上不相关的数组解释”之间有一个中间立场。策略模式-@coderealm:不要把它们作为评论发布,而是编辑你的答案。当你在做的时候,编辑你的答案,解释为什么这些模式与OP的问题相关。如果你这样做的话,我可能会恢复我的投票。向下投票,因为目前的答案并没有回答OP的问题,并且没有进一步解释OCP或SP带来了什么,并不比“查找这些术语,看看你是否学到了什么”。一行回答应该回答问题