Java中的多个条件if()语句?

时间:2014-11-17 17:42:10

标签: java if-statement

我知道这似乎是不可原谅的罪,但我有 150个变量,我想创建一个 if function 来执行以下操作:

if(a != 0 && b != 0 && c != 0....) {
  //do this
} else {
  //do this instead
}

然而,当我设置其中一个if语句条件(即b!=1)时,其他条件仍然相同(a!=0c!=0) ,else函数仍在运行,即使它应该是最初的//do this而不是//do this instead(参见上面的代码片段)。

我的问题是:

1。有什么原因导致它不能正常工作,如果有,我该如何解决?
2. 如果没有列出所有150个变量!=0 && !=0 ,有没有更简单的方法呢?

干杯

5 个答案:

答案 0 :(得分:2)

当然这样做会更简单:

List<Integer> values = new ArrayList<Integer>();

values.add(val1);
values.add(val2);
// And so forth...

boolean pass = true;

for (Integer v : values) {
    if (v != 0) {
        pass = false;
        // You could log which variable failed here...
    }
}

if (pass) {
    // Do something
} else {
    // Do something else
}

答案 1 :(得分:1)

使用数组,循环和布尔值。检查你的阵列...有可能......你的老师不会让你创建150个整数变量。

int[] integers = new int[150];
integers[0] = 1; // Set your like 150 variables like this
integers[1] = 2; 

boolean isAllNotZero = false;

for(int i = 0; i < integers.length - 1; i++) {
   if(integers[i] != 0) {
     boolean isAllNotZero = true;
   }
}

if(isAllNotZero) {
  // Do something 
} else {
  // Do something else
}

答案 2 :(得分:0)

1)我不太确定你的意思是“设置一个if语句条件”。但是,如果您的意思是b - 相关的测试评估为true而其他测试仍然与false相关,则表明该行为是有意的。您正在使用逻辑AND &&来加入您的条件。这意味着当且仅当个别条件的全部为真时,整体情况才为真。

如果你希望在个别条件的任何为真时执行第一个块,那么你应该使用OR(||)代替。

2)if语句总是需要一个布尔条件 - 在这种情况下,您是由150个单独条件的组合形成的。如果您需要检查150个字段以达到整体决策,那么以某种方式这些都将需要访问。

但是,您可以让自己更轻松。首先,如果ab等是对象的一部分,那么你可以提供一个很好的公共方法来描述条件是什么,并隐藏讨厌的细节(例如public boolean isReadyToExecute())。

另外,如果你有150个变量,很可能它们都是同一类型的实例。比方说,例如,您正在跟踪150个文件以查看它们是否已生成。而不是像以下变量:

private boolean fileReady1;
private boolean fileReady2;
// ...
private boolean fileReady150;

您可以使用数组(或其他一些集合):

private boolean[] filesReady = new boolean[150];

现在你不必手动拼出每个变量,以便提出你的布尔条件:

public boolean isReadyToLoad() {
   for (int i = 0; i < filesReady.length; i++) {
       if (!filesReady[i]) {
           // Found a file that wasn't ready, so we're not ready overall
           return false;
       }
   }
   // Got through all the files without finding an unready one
   return true;
}

具体方法取决于问题的性质。但我认为信息隐藏(即包装好的方法)和循环的某些组合将涵盖你需要做的任何事情。

(并且不要忘记在方法中包装东西可以嵌套。也许前20个字段代表一组东西,接下来30代表另一个,等等。然后你可以包装每个这些在方法中,并将isReadyToLoad()实现为allFilesLoaded() && status.isSignedOff() && userDao.allUsersHavePasswords() ...)

答案 3 :(得分:0)

您可以stream执行此操作。

List<Integer> vars = new ArrayList<>();
vars.add(a);
vars.add(b);

if (vars.stream().noneMatch(v -> v == 0)) {
   // No variable = 0. Do something
} else {
   // Do something
}

答案 4 :(得分:-1)

如果不了解有关您的解决方案的更多详细信息,很难说。 Karnaugh map可以帮助您。