Неизвестный цикл использования - PullRequest
2 голосов
/ 09 августа 2011

Эту страницу пользователь должен выбрать один из 2-х флажков 5 раз.Поэтому я написал это:

        if (box1a.isSelected() == true || box1b.isSelected() == true) {
            if (box2a.isSelected() == true || box2b.isSelected() == true) {
                if (box3a.isSelected() == true || box3b.isSelected() == true) {
                    if (box4a.isSelected() == true || box4b.isSelected() == true) {
                        if (box5a.isSelected() == true || box5b.isSelected() == true) {


                                 with some other things he does when it is true.


        } else {
            new Error("You must select an answer at all the questions");
        }

Тогда он возвращает ошибку только в том случае, если вы не отметили один из верхних флажков.Тогда, понятно, мне нужен цикл while, но я не знаю, как это сделать.Я знаю, как работает цикл while, но не знаю, как он будет выглядеть в этой ситуации.Пожалуйста, помогите

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

Ответы [ 6 ]

1 голос
/ 09 августа 2011
if ((box1a.isSelected() || box1b.isSelected()) &&
   (box2a.isSelected() || box2b.isSelected())  &&
   (box3a.isSelected() || box3b.isSelected())  &&
   (box4a.isSelected() || box4b.isSelected())  &&
   (box5a.isSelected() || box5b.isSelected())) 
   {
      //true stuff
   }
   else 
   {
       new Error("You must select an answer at all the questions");
   }

Вы никогда не должны не должны проверять истинность с ==.Это плохой стиль, лучше просто использовать возвращаемое значение от isSelected()

1 голос
/ 09 августа 2011
if ((box1a.isSelected() == true || box1b.isSelected() == true) &&
   (box2a.isSelected() == true || box2b.isSelected() == true) &&
   (box3a.isSelected() == true || box3b.isSelected() == true) &&
   (box4a.isSelected() == true || box4b.isSelected() == true) &&
   (box5a.isSelected() == true || box5b.isSelected() == true)) {
      //DO SOMETHING IF TRUE
}
else {
      new Error("You must select an answer at all the questions");
}

Зацикливание не требуется ^ _ ^

0 голосов
/ 09 августа 2011

Не знаю, зачем вам нужен цикл while. Если вы думаете, что пользователь должен «оставаться в курсе», пока ваше условие (на все 5 вопросов) не выполнено, то это не нужно. Поток диспетчеризации событий (EDT) продолжит выполнение «цикла» для вас.

С другой стороны, если вы ищете компактный способ проверки всех своих флажков, вы можете изменить способ их объявления из (при условии) javax.swing.JCheckbox box1a; и т. д. либо к фиксированному массиву, либо к массиву ArrayList, который затем можно перебрать с помощью цикла for.

0 голосов
/ 09 августа 2011
if(!box1a.isSelected() && !box1b.isSelected()) {
    // You must select an answer at all the questions
}
else if (box1a.isSelected() && box1b.isSelected() && box2a.isSelected() && box2b.isSelected() && box3a.isSelected() && box3b.isSelected() && box4a.isSelected() && box4b.isSelected() && box5a.isSelected() && box5b.isSelected()) {
    // with some other things he does when it is true.
}

Здесь следует отметить несколько моментов.

  1. Избегайте использования имен классов, таких как Error, поскольку они обычно используются для подлинной java.lang.Error логики.
  2. Если у вас логическое значение, вам не нужно использовать оператор ==.
0 голосов
/ 09 августа 2011

Общая стратегия будет выглядеть примерно так:

bool flag = true;
do{
    //search for input
    if (/*the input is valid*/)
        flag = false;
}while (flag);

Но если вы жестко программируете так много опций, у вас может быть неправильный дизайн.Попробуйте что-то вроде переключателя, как предложил Джером С.

0 голосов
/ 09 августа 2011

почему в этом случае вы не используете переключатель (с установленным переключателем по умолчанию)?

...