2016-07-26 91 views
0

我創建了一個switch語句,但一切似乎都落入默認狀態。如果我以if/else格式重寫它,它會正常工作。任何人都可以解釋爲什麼這是?謝謝!爲什麼這個switch語句不起作用?

不起作用:

switch(delta){ 
    case (delta<10): 
     xsmall++; 
     break; 
    case (delta>= 10 && delta< 50): 
     small++; 
     break; 
    case (delta>= 50 && delta<250): 
     med++; 
     break; 
    case (delta>= 250 && delta<1000): 
     large++; 
     break; 
    case (delta>= 1000): 
     xlarge++; 
     break; 
    default: 
     unknown++; 
    } 

作品成功:

if(delta<10) 
    xsmall++; 
else if(delta>= 10 && delta < 50) 
    small++; 
else if(delta >= 50 && delta < 250) 
    med++; 
else if(delta >= 250 && delta <1000) 
    large++; 
else if(delta >= 1000) 
    xlarge++; 
else 
    unknown++; 
+0

您正在接通數字「delta」,但在您的「case」標籤中包含布爾值。 –

回答

1

這將工作:

switch(true){ 
    case (delta<10): 
     xsmall++; 
     break; 
    case (delta>= 10 && delta< 50): 
     small++; 
     break; 
    case (delta>= 50 && delta<250): 
     med++; 
     break; 
    case (delta>= 250 && delta<1000): 
     large++; 
     break; 
    case (delta>= 1000): 
     xlarge++; 
     break; 
    default: 
     unknown++; 
    } 

原因:你需要傳遞布爾值,switch語句因爲你所有的情況都會返回布爾值而不是數字

+0

- 你的代碼看起來不錯 - 我們都知道你的意圖。但是你成功地編譯並執行了這些代碼嗎?我們能看到整個程序嗎?我無法擺脫*「重複標籤」錯誤「*錯誤。第一種情況我沒有收到。那麼「規則」(?)「case表達式必須是常量表達式」呢? – DSlomer64

+0

代碼根本不會編譯,除非我們使'delta'' final',它擺脫了第一種情況的錯誤,但是我們又回到了「重複標籤爲false」。 – DSlomer64