Свинг Java; выбрать между оператором if или оператором do-while?

У меня есть счетчик, который считает до 4 в цикле, и счетчик, который подсчитывает, сколько из этих циклов прошло.

В моем коде ниже для обеих меток установлено значение true при счете 1. Но я хочу, чтобы метка1 отображалась при счете 1, а метка2 — при счете 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);
            }
        }
    }
}

person Opoe    schedule 15.04.2011    source источник
comment
Не уверен, что вы пытаетесь сделать, но если count равно единице или двум в вашем коде, один из ваших циклов do-while будет бесконечным.   -  person eaj    schedule 15.04.2011


Ответы (3)


do while предназначен для циклов, то есть многократного выполнения кода. Вы заметили, что если alternativecounter равно 3, код входит в бесконечный цикл? Кроме того, тело do while всегда выполняется по крайней мере один раз, поэтому (кроме бесконечного цикла) этот код неверен.

Если код для цикла, который вы пытаетесь условно выполнить, не должен выполняться более одного раза (и здесь ясно, что это действительно не так), используйте оператор if.


Как уже говорили другие, это также нелепый способ попытаться оптимизировать ваш код — это преждевременная оптимизация и микрооптимизация.

person Matt Ball    schedule 15.04.2011
comment
ну, извините, если вы и другие так сказали, я очень хочу учиться и действительно задаюсь этим вопросом. Цените свое время и отвечайте - person Opoe; 15.04.2011

Ваш написанный код либо не будет выполнять do/while, либо приведет к бесконечному циклу, если он это сделает. Не беспокойтесь об эффективности и работайте над тем, чтобы сделать этот код читабельным и правильным.

person Amir Afghani    schedule 15.04.2011

Слушатель событий должен обрабатывать только одно событие. Таким образом, во время события вы проверяете состояние своей переменной, а затем выполняете соответствующую обработку.

Таким образом, вы никогда не будете использовать do/while. Фактически в вашем опубликованном коде вы ввели бесконечный цикл. Этот бесконечный цикл, в свою очередь, заморозит графический интерфейс, потому что он не сможет реагировать на другие события.

person camickr    schedule 15.04.2011