Если-else работает, не переключайте
Я создаю приложение, которое имеет сетку изображений с текстом, и каждый из них открывает другое действие. Он отлично работает, но только для целей дизайна я хочу заменить if-else statements
на if-else statements
(который, как я полагаю, могу сделать), но он не работает. Сейчас мой рабочий код для установки метки на каждом изображении:
if(position == 0)
textView.setText(R.string.zero);
else if(position == 1)
textView.setText(R.string.one);
else if(position == 2)
textView.setText(R.string.two);
else if(position == 3)
textView.setText(R.string.three);
else if(position == 4)
textView.setText(R.string.four);
else if(position == 5)
textView.setText(R.string.five);
ect....
Я хочу использовать:
switch(position)
case 0:
textView.setText(R.string.zero);
case 1:
textView.setText(R.string.one);
case 2:
textView.setText(R.string.two);
case 3:
textView.setText(R.string.three);
case 4:
textView.setText(R.string.four);
но когда я сделал это, ярлык был последним, который я определил (в моем примере это было бы "четыре" ). У меня также есть аналогичный код для каждого объекта, чтобы запустить другой intent
с переменной position
, однако это делает обратное и делает каждое намерение равным первому. Является ли мой синтаксис неправильным или это не сработает для моей ситуации?
Ответы
Ответ 1
Вам нужно break;
после каждого оператора в case
, иначе выполнение будет стекать вниз (все случаи ниже того, который вы хотите, также вызываются), поэтому вы всегда получите последний случай.
switch(position) {
case 0:
textView.setText(R.string.zero);
break;
case 1:
textView.setText(R.string.one);
break;
case 2:
textView.setText(R.string.two);
break;
case 3:
textView.setText(R.string.three);
break;
case 4:
textView.setText(R.string.four);
break;
}
Здесь официальный учебник, объясняющий, когда и когда не использовать break;
.
Ответ 2
После каждой ветки вам нужно break;
:
switch (position) {
case 0:
textView.setText(R.string.zero);
break; // <-- here
// etc
}
Легитимное использование switch
, когда вы не break
, существуют, называются провалами; или потому, что вы return
или throw
.:
switch (someNumber) {
case 0:
return 0;
// no need for break here
case 1:
throw new IllegalArgumentException();
// no need to break here
case 2:
System.out.println("Oh, I got two!");
// fall through
case 3:
return 3;
default:
System.out.println("Meh")
// No need to break: last possible branch
}
return -1;
вернет 3, даже если вы введете 2.
Но в противном случае вам нужно break
.
Ответ 3
Использование инструкции break после каждого случая должно устранить проблему. Я также использовал бы инструкцию по умолчанию, а также после последнего случая.
Ответ 4
Это решение. Вы должны использовать break
, чтобы избежать прохождения каждого случая:
switch(position)
case 0:
textView.setText(R.string.zero);
break;
case 1:
textView.setText(R.string.one);
break;
case 2:
textView.setText(R.string.two);
break;
case 3:
textView.setText(R.string.three);
break;
case 4:
textView.setText(R.string.four);
break;
Я бы рекомендовал прочитать документацию о оракуле о инструкции .
Ответ 5
Вам нужно использовать оператор break после операций с eace case. В операторе switch-case, если вы не используете инструкцию break, тогда все случаи после этого конкретного будут выполнены также
case 0:
textView.setText(R.string.zero);
break;
Ответ 6
Не забудьте поставить break;
после каждого случая: например:
switch(position){
case 0:
textView.setText(R.string.zero);
break;
case 1:
textView.setText(R.string.one);
break;
case 2:
textView.setText(R.string.two);
break;
case 3:
textView.setText(R.string.three);
break;
case 4:
textView.setText(R.string.four);
break;
}
Ответ 7
В операциях Switch-case вам нужно поместить break; после каждого случая.
switch(position){
case 0:
textView.setText(R.string.zero);
break;
case 1:
textView.setText(R.string.one);
break;
case 2:
textView.setText(R.string.two);
break;
case 3:
textView.setText(R.string.three);
break;
case 4:
textView.setText(R.string.four);
break;
default:
System.out.println("not available");
}
Также вам нужно поместить по умолчанию:, потому что, когда все случаи неправильны, время выполнения по умолчанию: действие.
В операторе switch-case не забывается о break; и действии по умолчанию.
Ответ 8
Каждый оператор break завершает заключающий оператор switch. Поток управления продолжается с первым оператором, следующим за блоком коммутатора. Операторы break необходимы, потому что без них заявления в блоках коммутатора проваливаются: все инструкции после метки совпадения выполняются в последовательности, независимо от выражения последующих меток case, до тех пор, пока не встретится оператор break.
Коммутатор быстрее, чем оператор if-else
Нижняя строка: по умолчанию необязательно (работает как инструкция else в коммутаторе), Break является обязательным.
Интересный факт: вы не увидите никакой ошибки компиляции, даже если вы забыли разместить оператор break.
Ответ 9
Для switch
требуется < <21 > , в каждом случае. Но в вашем случае это можно сделать гораздо проще, указав массив, как показано ниже.
String values = {R.string.zero, R.string.one, R.string.two, ... };
Используйте это для заполнения textView: textView.setText(values[position]);