2015-07-03 59 views
0

我試圖讓一個長的if語句更緊湊;這是它是如何原創:如何根據Java中ArrayList的大小將變量分配給變量?

char x; 
if(list.size()== 1){ 
    x = 'a'; 
} 
if(list.size()== 2){ 
    x = 'b'; 
} 
if(list.size() == 3){ 
    x = 'c'; 
} 
if(list.size() == 4){ 
    x= 'd'; 
} 

有沒有可能壓縮此代碼?

感謝不已, 傑瑞範中號

+0

''char x =(char)('a'+ list.size() - 1);'',適用於''a''到''z'' –

+0

您可以使用開關 –

回答

0

作爲第一步,我們重構代碼到if - else級聯和備份列表的大小,我們要經常使用:

1:

int size = list.size(); 
char x; 
if(size == 1) { 
    x = 'a'; 
} else if(size == 2) { 
    x = 'b'; 
} else if(size == 3) { 
    x = 'c'; 
} else if(size == 4) { 
    x = 'd'; 
} else { 
    //undefined 
    x = '\0'; 
} 

正如我們只有在這種情況下,比較常量列表的大小,我們可以進一步將其轉化成一個switch聲明:

2:

char x; 
switch (list.size()) { 
    case 1: x = 'a'; break; 
    case 2: x = 'b'; break; 
    case 3: x = 'c'; break; 
    case 4: x = 'd'; break; 
    //undefined 
    default: x = '\0'; break; 
} 

假設這是不是一個隨機選擇的例子,但實際的代碼,我們看到,我們需要一個函數,它接受若干從1開始其輸出的字母('a''z')與增加值:

3:

char x; 
if(list.isEmpty()) { 
    //undefined 
    x = '\0'; 
} else { 
    //our function 
    x = (char) ('a' + list.size() - 1); 
    if(x > 'z') { 
     //undefined 
     x = '\0'; 
    } 
} 
0

更容易的選擇: 使用switch case

Tricker選項:

char x = (char) ('a' + list.size() - 1); 
+0

缺失'(char)''cast –

+0

我不認爲你需要一個演員,因爲無論如何你都將它分配給一個char。 – Codebender

+0

「char」的''+''運算符產生一個「int」。你*必須*將其轉換爲''char''或不能編譯。 –

0

你基本上映射大小的字符。這是可以做到簡單:

x = 'a' + list.size() - 1; 
-2
char x; 
int size = list.size(); 
if (size >= 1 && size <= 4) { 
    x = "zabcd".charAt(size); 
} 
+0

@enkor是的_does_提供了一個問題的答案。問題是如何編寫代碼,等同於給定的代碼,但更簡潔。這不是一個答案? –

+0

好的,從技術上說它回答了這個問題。很明顯,我的評論並不精確,並且表示歉意。 然而,提供代碼的解釋會有所幫助,但並不能解釋代碼的作用。好吧,足夠公平的人應該足夠明亮,從中挑選出來並弄清楚它在做什麼。但我相信這不符合stackoverflow的精神。 – enkor