而循环写得太难了

时间:2013-10-13 21:42:34

标签: java

我编写了这段代码及其工作原理,但我似乎无法找到一种方法来编写它更容易。现在我正在指定所有可能的情况并向它们添加功能。如果我只使用两个布尔变量(status1和status2),如下面的代码中,它是可行的。但是如果我使用2个以上的变量,那么我需要写的代码太多了。

while (!status1 || !status2) {
            if (!status1 && !status2) {
                jTextField1.setForeground(Color.red);
                jTextField2.setForeground(Color.red);
                break;
            } else if (!status1 && status2) {
                jTextField1.setForeground(Color.red);
                break;
            } else if (status1 && !status2) {
                jTextField2.setForeground(Color.red);
                break;
            }

基本上我想要实现的是写下面的代码(没有指定所有可能的情况)。我测试了这段代码,但它只执行第一个if语句而不执行其他语句。

我做错了什么?我希望它遍历所有if语句。

while (!status1 || !status2) {
            if (!status1 {
                jTextField1.setForeground(Color.red);
                break;
            } else if (!status2) {
                jTextField2.setForeground(Color.red);
                break;
            }

5 个答案:

答案 0 :(得分:1)

别的是你的问题。休息时间也不正确。

if (!status1) {
    jTextField1.setForeground(Color.red);
} 
if (!status2) {
    jTextField2.setForeground(Color.red);
}

答案 1 :(得分:1)

while (!status1 || !status2 /* || !status3 || and so on*/) {
    boolean do_break=false;
    if (!status1) {
        jTextField1.setForeground(Color.red);
        do_break=true;
    } 
    if (!status2) {
        jTextField2.setForeground(Color.red);
        do_break=true;
    }
/*    if (!status3) {
        jTextField3.setForeground(Color.red);
        do_break=true;
    }*/
    if(do_break) break;

    here_the_part_that_you_omitted_from_the_question();//...
}

请澄清是否有一个你没有告诉我们的循环体。

答案 2 :(得分:0)

无法理解您使用while循环的原因。这样的事情怎么样?

Color color1 = Color.red;
Color color2 = Color.red;

if (status1) {
    color1 = 0;
}

if (status2) {
    color2 = 0;
}

jTextField1.setForeground(color1);
jTextField2.setForeground(color2);

答案 3 :(得分:0)

我认为这是因为你在“while”语句中写的语句与第一个“if”语句相同。如果你写

  

while(true)

相反,它应该工作。

答案 4 :(得分:0)

这是简化的等效代码 您的代码:

while (!status1 || !status2) {
            if (!status1 && !status2) {
                jTextField1.setForeground(Color.red);
                jTextField2.setForeground(Color.red);
                break;
            } else if (!status1 && status2) { 
                jTextField1.setForeground(Color.red);
                break;
            } else if (status1 && !status2) {
                jTextField2.setForeground(Color.red);
                break;
            }
}

在上面的代码中,根本不需要“if”!因为我们在while循环中肯定至少有两个是假的,如果控制来到这里,所有“if”必须要失败!在这种情况下,这种情况永远不会失败!

结果相同,但简单一:尝试一下!

    while (!status1 || !status2) {
            if (status1) {                //equivalent to (status1 && !status2) 
                jTextField2.setForeground(Color.red);
                break;

            } else if(status2){           //equivalent to (!status1 && status2) 
                jTextField1.setForeground(Color.red);
                break;
            }
                jTextField2.setForeground(Color.red);
                jTextField1.setForeground(Color.red);            
                break;
}