2016-01-31 104 views
0

我正在開發一個應用程序,在1年後變得相當大。所以我正在努力提高它在各方面的表現。 我不是一個專業的,我一直在自學編程在過去的一年,當我回頭看幾行我過去寫的他們看起來太傻了,像下面這樣:如果聲明:比較多個整數

if (screenPos == 0 || screenPos == 20 || screenPos == 22){ 

//do something 
} else { 

} 

是有一個最簡單/較短的方式來比較一個值與幾個整數?

類似:

if (screenPos != 0, 20, 22){ 
    //do something 
} 

或者也許在一個數組列表中添加此號碼,並檢查「如果(screenPos在數組存在)」?

我知道這是一個新手問題,很抱歉。我一直在尋找答案,但還沒有找到答案。

在此先感謝

回答

1

你可以使用:

ArrayList<Integer> test = Arrays.asList(0,20,22); 
//... 
if(test.contains(screenpos)){ 
    //... 
} 

EDIT(感謝@Gabe Sechan):這是更有效初始化List外if語句,正如評論中指出的那樣。

當然,最好是使用一個開關,真的,但是如果你想要的東西,總之,這將是很好的,雖然略超常規

+0

我使用你的工具,因爲它是最短的,我可以多次使用檢查特定的屏幕編號。謝謝! –

+1

這實際上是效率低下的代碼 - 它每次運行時都會創建一個新的List對象。你最好先初始化列表並保存它,創建對象是昂貴的,應該避免多次執行。此外,一個集合會比一個列表更好 - 一個列表無法假定它的排序如此糟糕以至於不能進行全搜索而不是二分搜索(O(n)vs O(log(n)),並且可能具有相同的元素多次(一個集合不能) –

+2

也可以接受只是一個標準的數組循環,但是創建一個只是使用包含的列表是一個可怕的可怕習慣。 –

2

你可以這樣做:

switch(screenPos) { 
    case 0: 
    case 20: 
    case 22: 
     //do something in case screenPos was equal to 0 or 20 or 22 
     break; 
    default: 
     // do something otherwise 
} 
+0

感謝您的回覆。你的建議可以完成這項工作,但我發現了一個更簡單的工作,我已經在使用它,這對我的情況更爲合適。 –

1

那麼你正在檢查混凝土整數,沒有明顯的圖案,沒有自然的技巧與模,乘法和og部門將工作。以上所有其他建議都是可行的(我最喜歡Mulligans),但我認爲您應該做的最重要的事情是將條件重構爲另一種方法,並在此執行檢查。

如果您採用經典的面向對象的編程觀點,這顯然是最佳實踐。