0

私はこのコードとその動作を書きましたが、もっと簡単に書く方法が見つからないようです。現在、考えられるすべての状況を特定し、それらに機能を追加しています。以下のコードのように、2 つのブール変数 (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 に答える
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 ループの中にいるので、少なくとも 2 つのうちの 1 つが false であり、制御がここに来る場合は、上記のすべての「if」が失敗する必要があります。この状況では、この 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 に答える
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」文と同じだからだと思います。あなたが書くなら

while (真)

代わりに、動作するはずです。

于 2013-10-13T21:50:42.003 に答える