0

ループ内で4までカウントするカウンターと、これらのループがいくつ通過したかをカウントするカウンターがあります。

以下の私のコードでは、両方のラベルがカウント1でVisibilityをtrueに設定しています。しかし、ラベル1をカウント1に、label2をカウント2に表示したいと思います。

あなたへの私の質問は:

ifステートメントのみでラベルの可視性を設定する、またはdo-whileステートメントを複数回使用できるより効率的な方法は何ですか?

class counters2 implements ActionListener
{
    int count = 0, alternativecounter = 0;
    public void actionPerformed(ActionEvent e)
    {
        int fakeSecond = (count++ % 4) + 1;
        if(fakeSecond == 1)
        {
            alternativecounter += 1;
            if(alternativecounter == 3)
            {
                do
                {
                    label1.setVisible(true);
                }while(count == 1);
                do
                {
                    label2.setVisible(true);
                }while(count == 2);
            }
        }
    }
}
4

3 に答える 3

4

Ado whileループ、つまりコードを繰り返し実行するためのものです。alternativecounterがの場合3、コードが無限ループに入ることに気付きましたか? さらに、a の本体do while常に少なくとも 1 回は実行されるため、(無限ループは別として) このコードは正しくありません。

条件付きで実行しようとしているループするコードが複数回実行されるべきではない場合 (そして、ここで、実際に実行すべきではないことは明らかです)、ステートメントを使用します。if


他の人が言ったように、これはコードを最適化しようとするばかげた方法でもあります - それは時期尚早の最適化マイクロ最適化です。

于 2011-04-15T18:55:02.343 に答える
2

記述されたコードは、do/while を実行しないか、実行した場合に無限ループになります。効率について心配する必要はありません。このコードを読みやすく、正確なものにするよう努めてください。

于 2011-04-15T18:54:03.520 に答える
2

イベント リスナーは、単一のイベントのみを処理する必要があります。したがって、イベント時に変数の状態を確認してから、関連する処理を行います。

したがって、do/while を使用することはありません。実際、投稿されたコードでは、無限ループが導入されています。この無限ループは、他のイベントに応答できないため、GUI をフリーズさせます。

于 2011-04-15T18:54:18.630 に答える