我知道这似乎是不可原谅的罪,但我有 150个变量,我想创建一个 if function 来执行以下操作:
if(a != 0 && b != 0 && c != 0....) {
//do this
} else {
//do this instead
}
然而,当我设置其中一个if语句条件(即b!=1
)时,其他条件仍然相同(a!=0
,c!=0
) ,else函数仍在运行,即使它应该是最初的//do this
而不是//do this instead
(参见上面的代码片段)。
我的问题是:
1。有什么原因导致它不能正常工作,如果有,我该如何解决?
2. 如果没有列出所有150个变量!=0 && !=0
等,有没有更简单的方法呢?
干杯
答案 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个字段以达到整体决策,那么以某种方式这些都将需要访问。
但是,您可以让自己更轻松。首先,如果a
和b
等是对象的一部分,那么你可以提供一个很好的公共方法来描述条件是什么,并隐藏讨厌的细节(例如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可以帮助您。