Java 简化if语句

Java 简化if语句,java,if-statement,Java,If Statement,我有一个程序,其中包含一些与我将要向大家介绍的语句类似的if-语句。我想知道你们能不能帮我简化一下这个等式。我之所以问这个问题,是因为在我的记事本++中,它持续了443列,如果需要的话进行编辑真的很令人沮丧,而且随着我不断添加变量,编辑的时间越来越长。基本上,对于我的许多类似的if语句中的一个示例,我只想在滑块中的任何一个当int(rpg.StatisticPoints)等于或小于0时尝试增加值时执行一个操作。我用来确定滑块的值是否在上升的方法是将其当前值与与滑块关联的int进行比较,然后检查结

我有一个程序,其中包含一些与我将要向大家介绍的语句类似的
if
-语句。我想知道你们能不能帮我简化一下这个等式。我之所以问这个问题,是因为在我的记事本++中,它持续了443列,如果需要的话进行编辑真的很令人沮丧,而且随着我不断添加变量,编辑的时间越来越长。基本上,对于我的许多类似的
if
语句中的一个示例,我只想在
滑块中的任何一个当
int
rpg.StatisticPoints
)等于或小于0时尝试增加值时执行一个操作。我用来确定滑块的值是否在上升的方法是将其当前值与与滑块关联的
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
}

if(rpg.StatisticPoints您当前解决方案的问题不仅仅是一条长长的线,还在于人们很难阅读和理解实际验证的内容

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

例如:

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;
}
那怎么办

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
}

if(rpg.StatisticPoints您可以删除大部分
()
s:


rpg.StatisticPoints
if(rpg.StatisticPoints您可以创建如下新变量:

int will = rpg.WillSlider.getValue() - rpg.Will;
那么您的测试将更短:

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

if((rpg.StatisticPoints
boolean state=(rpg.StatisticPoints)在您的情况下,您需要的不仅仅是“内联”条件。
在某些地方,在你的情况下,通常的编程是不正确的

也许你可以使用观测者模式
。如果你能很好地构造你的类,并添加一个信号,它会引起一个标志。例如:
一个条件是false

这将返回到您的主要条件,该条件将检查
观察者模式是否曾升起过一个标志

检查一下观测者模式
。如果你的项目规模很大,我想这会有很大帮助


如果只添加一个变量,则只需以非常简单的方式为新变量编写条件。

只需在每个
&&
运算符处换行。或者,如果需要经常执行,则编写一个方法来检查此条件。如果必须检查443[!!!]条件,可能您的项目中存在设计缺陷。
((a-b)<0)
通常与
a
相同,但并不总是如此。为什么必须使用第一种方法?是否可以创建一个包含两个数据成员的类-test,limit。将每对数据存储在arraylist中,然后在数组中循环,对值对进行比较?更多代码,但可能更可读?如果他添加布尔值已经像
boolean hassharisma
;)当然,一切都取决于他的想法。你可以写
result=result&&secondCondition
,而不是
result&=secondCondition;
我知道,我是先这样写的,但我认为这会更简单。但我想这只是品味的问题。编辑:)我喜欢你的答案……可读性几乎超过了所有其他要求。如果他添加了大量变量怎么办?如果只检查一个条件就足够了怎么办?@ZouZou oh不知道
&
有一个复合赋值,谢谢!这似乎对我当前的项目很有帮助。对于这篇感谢您拓宽我的知识面。谢谢,似乎每个人都在建议换行符。我从未离开过,我可以在
if
语句中断开一个链接,编译器会理解的。另外,感谢您指出我可以删除其中一些
()
我只是想我必须告诉程序确保您检查(rpg.WillSlider.getValue()-rpg.Will<0)在执行ActionsHanks之前,每个人似乎都在建议换行符。我从来没有离开过,我可以在
if
语句中断开一个链接,编译器会理解它。@user2388169通常,如果你可以将空格放在某个地方,该空间可以任意大,可能包括换行符和注释等。你可以这样做吗可能会弄乱格式,编译器也不会在意。并非所有语言都是这样。
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
}
int will = rpg.WillSlider.getValue() - rpg.Will;
if ( ( rpg.StatisticPoints <= 0 ) && ( will < 0 ) && ( Perception < 0 )  ... ) {}
if ( ( rpg.StatisticPoints <= 0 )
  && ( will < 0 )
  && ( perception < 0 )  ... ) {}
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*/}