简化if语句

时间:2013-05-21 12:05:54

标签: java if-statement

我有一个程序包含一些if - 类似于我将要向您呈现的语句。我想知道你们是否可以帮助我以任何方式简化这个等式。我问的原因是因为在我的Notepad ++中,它继续用于443列,如果需要的话编辑真的很令人沮丧,并且随着我不断添加变量而不断变长。基本上,对于我的许多类似if语句之一的此示例,我只想在SliderBars int rpg.StatisticPoints int的任何人试图提高价值时执行操作我用来确定滑块是否值上升的方法只是将其当前值与滑块关联的if (rpg.StatisticPoints <= 0 && ((rpg.WillSlider.getValue() - rpg.Will) < 0) && ((rpg.PerceptionSlider.getValue() - rpg.Perception) < 0) && ((rpg.StrengthSlider.getValue() - rpg.Strength) < 0) && ((rpg.DexteritySlider.getValue() - rpg.Dexterity) < 0) && ((rpg.ConstitutionSlider.getValue() - rpg.Constitution) < 0) && ((rpg.CharismaSlider.getValue() - rpg.Charisma) < 0) && ((rpg.IntelligenceSlider.getValue() - rpg.Intelligence) < 0)) { //Do actions } 进行比较,然后检查是否等于0。结果是积极的。

{{1}}

我知道这里有很多变量,你不熟悉,因为你没有看到我的完整代码,但我的完整资源是100多行,我的问题只是基于物流,而不是真正的问题用语法。

7 个答案:

答案 0 :(得分:13)

您当前解决方案的问题不仅仅是一个长线,是因为某人很难阅读并理解实际验证的内容。

您可以创建一个辅助方法来构建该验证的if值,同时为其提供有意义的名称,而不是使用boolean语句中的所有条件。

例如:

private boolean isValidSomething(){

    boolean result = firstCondition;
    result &= secondCondition;
    ...

    return result;

}

通过这种方式,您的所有支票都会集中在一个地方,并且会更具可读性,因为您的if将成为:

 if(isValidSomething()) {...}

当然,使用在您的应用程序中有意义的名称创建方法。

如果您要验证几个有意义的不同条件,请加倍努力,并将它们分解为自己的方法。

最重要的是将这些逻辑分解为有意义的部分,例如:

private boolean validStatistics() {
     return statistics > 0;
}


private boolean validWill() {
     return will > 0;
}

....

您的主要验证将是:

private boolean validCharacter() {
     boolean valid = validStatistics();
     valid &= validWill();
     ...
     return valid;
}

答案 1 :(得分:4)

怎么样?
if (rpg.StatisticPoints <= 0 &&
   (rpg.WillSlider.getValue() < rpg.Will) &&
   (rpg.PerceptionSlider.getValue() < rpg.Perception) &&
   (rpg.StrengthSlider.getValue() <  rpg.Strength) &&
   (rpg.DexteritySlider.getValue() < rpg.Dexterity) &&
   (rpg.ConstitutionSlider.getValue() < rpg.Constitution) &&
   (rpg.CharismaSlider.getValue() < rpg.Charisma) &&
   (rpg.IntelligenceSlider.getValue() < rpg.Intelligence))
{
  //Do actions
}

此外,您可以将一些代码移动到单独的函数中:

bool CheckSliderValue(TypeOfSlider slider, TypeOfSliderValue value)
{
   return slider.getValue() < value;
}

并通过CheckSliderValue(rpg.WillSlider, rpg.Will) a.s.o调用此方法。这样你可以用最小的值来扩大支票或轻松改变“&lt;” “&lt; =”或类似。

答案 2 :(得分:3)

您可以创建新的变量,如:

int will = rpg.WillSlider.getValue() - rpg.Will;

然后你的测试会更短:

if ( ( rpg.StatisticPoints <= 0 ) && ( will < 0 ) && ( Perception < 0 )  ... ) {}

您也可以将测试分开到新行:

if ( ( rpg.StatisticPoints <= 0 )
  && ( will < 0 )
  && ( perception < 0 )  ... ) {}

答案 3 :(得分:2)

您可以删除大部分()

rpg.StatisticPoints <= 0 &&
rpg.WillSlider.getValue() - rpg.Will < 0 &&
rpg.PerceptionSlider.getValue() - rpg.Perception < 0 &&
rpg.StrengthSlider.getValue() - rpg.Strength < 0 &&
rpg.DexteritySlider.getValue() - rpg.Dexterity < 0 &&
rpg.ConstitutionSlider.getValue() - rpg.Constitution < 0 &&
rpg.CharismaSlider.getValue() - rpg.Charisma < 0 &&
rpg.IntelligenceSlider.getValue() - rpg.Intelligence < 0

修改

请参阅有关Operator Precendce

的Java教程

答案 4 :(得分:2)

if (rpg.StatisticPoints <= 0 
    && ((rpg.WillSlider.getValue() - rpg.Will) < 0)
    && ((rpg.PerceptionSlider.getValue() - rpg.Perception) < 0)
    && ((rpg.StrengthSlider.getValue() - rpg.Strength) < 0) 
    && ((rpg.DexteritySlider.getValue() - rpg.Dexterity) < 0) 
    && ((rpg.ConstitutionSlider.getValue() - rpg.Constitution) < 0)
    && ((rpg.CharismaSlider.getValue() - rpg.Charisma) < 0)
    && ((rpg.IntelligenceSlider.getValue() - rpg.Intelligence) < 0)){
    //Do actions
}

答案 5 :(得分:1)

boolean state= (rpg.StatisticPoints <= 0 && ((rpg.WillSlider.getValue() - rpg.Will) < 0) && ((rpg.PerceptionSlider.getValue() - rpg.Perception) < 0) && ((rpg.StrengthSlider.getValue() - rpg.Strength) < 0) && ((rpg.DexteritySlider.getValue() - rpg.Dexterity) < 0) && ((rpg.ConstitutionSlider.getValue() - rpg.Constitution) < 0) && ((rpg.CharismaSlider.getValue() - rpg.Charisma) < 0) && ((rpg.IntelligenceSlider.getValue() - rpg.Intelligence) < 0));


if(state){/*do actions*/}

 s1=(rpg.StatisticPoints <= 0);
 s2=((rpg.WillSlider.getValue() - rpg.Will) < 0);
 ...
 ...

 if(s1&&s2&&s3...){/* work*/}

答案 6 :(得分:0)

在您的情况下,您需要的不仅仅是“内联”条件。 在某些地方,通常的编程不适合你的情况。

也许你可以使用Observer pattern。如果你很好地构建你的类并添加一个会引发标志的信号。例如:One of the condition is false

这将返回到您的主要条件,这将检查Observer pattern是否有一个标志被提出。

检查Observer pattern。如果您的项目规模巨大,我认为这可能会有很大帮助。

如果你只添加一个变量,那么你只需要以一种非常简单的方式为新的变量写条件。