额外while循环条件基于一个条件

dzjeubhm  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(349)

变量 a 可以是0、1或2,其中值是要具有的额外while循环条件数。我可以用 switch 以及 case 但我想知道有没有更好的方法?

switch (a) {
    case 0: while (condition_1) {
        // ...
    } break;
    case 1: while (condition_1 || condition_2) {
        // ...
    } break;
    case 2: while (condition_1 || condition_2 || condition_3) {
        // ...
    } break;
}

在python中解决这个问题的方法是使用字典并将适当的lambda表达式存储在适当的索引中。但是,我的条件是“非final或有效final”,因此它们不能在java中的lambda表达式中使用。
这里的目的不是为了 while (true) 或者 while (false) 就这样吧。从一个 while (...something) 其计算结果为 false 然后在循环中做一些事情,将所有条件逐一更改为true。但在所有条件都成立之前,继续循环。
伪代码(我知道它有一些缺陷,只是为了演示):

a can be 0,1,2

p = 5
q = 7
r = 10
s = 14

if a = 1
while p != q -> p+=1
if a = 2
while p!= q || p!= r -> p+=1

另外,这是一个教我钓鱼而不是给我鱼型的问题。

icomxhvb

icomxhvb1#

提醒您java交换机支持失败。因为java中的switch case是语句而不是表达式,所以您需要一个helper函数来完成它:

private boolean helper(a) {
    boolean b = false;
    switch (a) {
        case 2: b = b || condition_3;
        case 1: b = b || condition_2;
        case 0: b = b || condition_1;
    }
    return b;
}

我真的想不出任何情况下你不能把一个助手函数。如果这是真的,我想了解一下(实际上,在python的例子中,答案还建议您使用helper(lambda形式)

8yparm6h

8yparm6h2#

假设您定义了一个条件列表。

boolean[] condition = new boolean[n];
``` `a` 是要检查的布尔数,所以只需创建一个新变量

boolean valid = false;

//check all conditions up to a
for (int i = 0; i < a; i++) {
if (condition[i]) {
valid = true;
break;
}
}

while (valid) {
//perform action and then run the checking valid code again
}

在这种情况下,您将检查 `a` 总的来说,这就是你想要的。

相关问题