2014-06-27 9 views
0

Можно ли сделать, если утверждения короче? Например:могу я сделать если короче?

if (intno == 0 || intno == 4 || intno == 7) 

может быть что-то вроде:

if (intno == 0 || 4 || 7) 

Это будет воспитывать ошибку, но есть что-нибудь подобное?

+1

Нет. Я уверен, что это было задано до ... – awksp

+1

, что должно быть довольно очевидно ...... но так или иначе, 'Int int = 0;' было бы то, что означало – user3720291

+0

Вы должны знать 'int' - это ключевое слово. – NewUser

ответ

0

вы можете создать отображение истины, как

Set<Integer> set = new HashSet<Integer>(); 
map.add(0); 
map.add(4); 
map.add(7); 

, а затем

if(map.contains(intValue){ 
} 
+4

Серьезно? Я бы почти даже не пошел на 'Set', а на целую« карту »? И тогда ваша карта не содержит значений для других int и вернет «null» вместо true или false. – Smutje

+0

Я бы использовал 'Set' здесь. Но он также намного медленнее, чем оригинал 'if'. – Henry

+9

Как 5 строк короче 1? –

3

Для целочисленных типов и перечислений, вы можете использовать переключатель заявление вместо:

switch(intno) { 
    case 0: 
    case 4: 
    case 7: 
      //code here 
      break; 
} 

Это также работает для строк в Java 7+

1

уже было предложено в комментариях следующее:

Arrays.asList(0, 4, 7).contains(intno) 

Это правильно и короче, но медленнее.

Обратите внимание, что этот код выполняет множество операций за кадром:

  • Преобразование 0, 4 и 7int с до Integer с.
  • Создать массив, содержащий эти объекты
  • Создать 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 
} 

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

Смежные вопросы