额外的循环条件......基于条件

时间:2016-03-27 23:56:16

标签: java while-loop

变量a可以是0,1或2,其中值是要具有的额外while循环条件的数量。我可以使用switchcase执行此操作,但我想知道是否有更好的方法吗?

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表达式存储在适当的索引中。但是,我的条件不是最终的,也不是最终的。#34;所以它们不能用在Java中的lambda表达式中。

此处的目标是获取while (true)while (false)并完成它。从while (...something)开始评估为false然后在循环内做一些事情,将所有条件逐个变为真。但是在所有条件都成立之前,请保持循环。

伪代码(我知道它有一些缺陷,只是为了演示):

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

另外,这是教我钓鱼而不是给我鱼类问题。

2 个答案:

答案 0 :(得分:1)

让我们说你已经定义了条件清单。

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条件,这就是您想要的。

答案 1 :(得分:0)

提醒你java开关支持通过。你需要一个辅助函数来完成它,因为java中的switch-case是语句而不是表达式:

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的情况下,答案还建议你使用帮助器(以lambda形式))