#java #if-statement
#java #if-оператор
Вопрос:
Можно ли сделать операторы if короче? Например:
if (intno == 0 || intno == 4 || intno == 7)
может быть что-то вроде:
if (intno == 0 || 4 || 7)
Это вызовет ошибку, но есть ли что-нибудь подобное?
Комментарии:
1. Нет. Я почти уверен, что об этом уже спрашивали раньше…
2. это должно быть довольно очевидно …… но в любом случае,
Int int = 0;
было бы то, что это означало3. Вы должны знать
int
, что это ключевое слово.4. Попробуйте написать
Int int = 0
, вы наверняка получите ошибку компиляции.5.
Arrays.asList(0,4,7).contains(intno)
может быть альтернативой.
Ответ №1:
Для целочисленных типов и перечислений вместо этого можно использовать оператор switch:
switch(intno) {
case 0:
case 4:
case 7:
//code here
break;
}
Это также работает для строк в Java 7
Ответ №2:
В комментариях уже было предложено следующее:
Arrays.asList(0, 4, 7).contains(intno)
Это правильно и короче, но медленнее.
Обратите внимание, что этот код выполняет множество операций за кулисами:
- Преобразуйте
0
,4
и7
int
s вInteger
s . - Создайте массив, содержащий эти объекты
- Создайте
List
содержащий этот массив - Преобразовать
intno
вInteger
- Выполните линейный поиск по списку, вызывая
equals
каждый объект
Это намного медленнее, чем просто три проверки. Конечно, если вы выполняете этот код один раз каждый раз, когда пользователь нажимает кнопку, это не имеет значения. Если вы вызываете его сто раз в секунду, это может произойти.
Однако, на мой взгляд, использование этого может быть более понятным, чем использование длинного if, особенно если вместо 3 есть 15 допустимых условий. Если вместо использования магических чисел вы даже сохраните возвращенный список, вы можете получить некоторые ясности:
private static final List<Integer> VALID_NUMBERS = Arrays.asList(0, 4, 7);
// ...
if (VALID_NUMBERS.contains(intno)) {
// Code here
}
Это короче и, возможно, понятнее. Это медленнее, поэтому будьте осторожны с этими конструкциями, не используйте его каждый раз, когда сможете.
Ответ №3:
вы можете сгенерировать отображение истины как
Set<Integer> set = new HashSet<Integer>();
map.add(0);
map.add(4);
map.add(7);
и затем
if(map.contains(intValue){
}
Комментарии:
1. Серьезно? Я бы даже не пошел на a
Set
, а на целоеMap
? И тогда ваша карта не содержит значений для других целых чисел и будет возвращатьnull
вместо true или false.2. Я бы использовал
Set
здесь. Но это также намного медленнее, чем оригиналif
.3. Как 5 строк короче 1?
4. я не включал его, но в операторе if я меняю
intno
на другое число, как бы я это сделал с maps?5. В if отсутствует скобка, и у map нет
contains
метода.