2014-06-27 51 views
0

是否有可能使if語句更短?例如:如果更短,我可以嗎?

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',而是一個完整的'Map'?然後,您的地圖不包含其他整數的值,並返回'null'而不是true或false。 – Smutje

+0

我會在這裏使用'Set'。但它也比原來的'if'慢得多。 – Henry

+9

5行如何比1短? –

3

對於整數類型和枚舉,你可以使用switch語句來代替:

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

這也適用用於Java 7+中的字符串

1

下已經在評論中有人提出:

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

這是正確的,較短的,但它是慢。

請注意,這段代碼是在幕後進行很多操作:

  • 轉換的047int s到Integer秒。
  • 創建包含這些對象
  • 陣列創建List包含陣列
  • 轉換intnoInteger
  • 執行在所述列表中的線性搜索,要求每equals對象

這是方式比三次檢查慢。當然,如果您每次用戶點擊一個按鈕時都執行一次該代碼,則無關緊要。如果你每秒鐘稱它一百次,它可能會這樣。

然而在我看來,使用這個可以比使用long更清楚,特別是如果不是3,那麼有15個有效條件。如果不是使用幻數你甚至存儲返回的列表中,你可能會得到一些清晰點:

private static final List<Integer> VALID_NUMBERS = Arrays.asList(0, 4, 7); 

// ... 

if (VALID_NUMBERS.contains(intno)) { 
    // Code here 
} 

短,可以清晰的。它較慢,所以要小心這些構造,不要每次都可以使用它。

相關問題