0

我编写了这段代码及其工作,但我似乎无法找到一种更容易编写它的方法。现在我正在指定所有可能的情况并向它们添加功能。如果我只使用两个布尔变量(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;
            }
4

5 回答 5

1

另一个是你的问题。休息也是不正确的。

if (!status1) {
    jTextField1.setForeground(Color.red);
} 
if (!status2) {
    jTextField2.setForeground(Color.red);
}
于 2013-10-13T21:47:42.500 回答
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();//...
}

请澄清是否存在您没有告诉我们的循环体。

于 2013-10-13T21:54:29.497 回答
0

看不出你为什么要使用while循环。这样的事情呢?

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

if (status1) {
    color1 = 0;
}

if (status2) {
    color2 = 0;
}

jTextField1.setForeground(color1);
jTextField2.setForeground(color2);
于 2013-10-13T21:48:58.790 回答
0

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

而(真)

相反,它应该可以工作。

于 2013-10-13T21:50:42.003 回答
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;
}
于 2013-10-13T22:35:38.960 回答