2013-02-26 35 views
3

我不知道是什麼導致了這個錯誤。我的老師和我過去了,無法找到問題所在。需要常量表達式? (Java switch語句)

import java.util.Scanner; 
public class MailAssignment 
{ 
public static void main(String [] args){ 

    Scanner userinput = new Scanner(System.in); 
    char p; 
    char f; 
    double price = 0; 
    System.out.println("First class or priority?"); 
    char type = userinput.next().charAt(0); 
    System.out.println("How much does the package weigh? (in ounces)"); 
    double weight = userinput.nextDouble(); 

    switch (type){ 
    case p: 
    if (weight > 16) 
     price = weight * 3.95; 

     else if (weight > 32) 
      price = (1.20 * (weight/16)); 
     else 
      price = 3.50 * weight; 


     break; 


    case f: 
    if (weight < 1) 
    price = 0.34; 

    else if (weight > 1) 
    price = 0.34 + (weight * 21); 

    else if (weight > 13) 
    price = weight * 3.95; 

     else if (weight > 32) 
      price = 1.20 * (weight/16); 
     else 
      price = 3.50 * weight; 

      break; 

     }  

    System.out.println("Your price is: " +price); 
    } 
} 

它拋出錯誤時,它的編譯和它所指向的情況下,P A「要求常量表達式」:行,但是,它也把它扔了對F:如果我切換他們,所以我必須做一些完全關閉。

+1

你不能在'case'語句中使用變量,這些變量沒有聲明爲final。 – 2013-02-26 14:13:46

+1

我正在嘗試類似的東西,事實證明,即使變量是最終的,也會拋出同樣的錯誤。 – 2013-12-25 23:56:47

回答

9

是的,case表達式必須是常量(或枚舉常量名稱) - 不能使用變量。有關更多詳細信息,請參見Java Language Specification section 14.11 (switch statements)。 (你甚至都沒有初始化的變量,因此目前還不清楚您預期發生,說實話什麼。)

你的意思是:

case 'p': 
    ... 

case 'f': 
    ... 

?這將匹配您的輸入(type)與文字文字'p''f'

(順便說一句,如果這難倒你的老師,我對他們是被教授Java如何適當關注。這是相當基本的東西。)

+0

或澄清,情況是爲變量的值,而不是它的名稱,所以情況是如果變量type ='p'的值做到這一點,如果它是'f'做那 – 2013-02-26 14:17:24

+0

@JeffHawthorne:哪個變量的值?如果你的意思是'type',那麼顯然它的名字是'type'而不是'p'。總之,我不確定你的評論實際上會讓事情變得更清楚...... – 2013-02-26 14:48:06

+0

我試圖擺脫這個詞常量,文字是一個更好的詞,但由於「類型」是一個變量,我們正在檢查類型值,我認爲常量可能會使事情混淆 – 2013-02-26 14:54:14

1

你不能在你的case語句中使用變量它必須是文字字符(例如'p','f')。

1

在case語句
您應該使用(字符開關)或(數字開關)僅
例如
可以使用(字符開關)

switch (type) { 
case 'p': 
....... 
case 'f': 
...... 
} 

switch (type) { 
case p: 
....... 
case f: 
...... 
} 
+0

好吧,如果你想讓事情變得更快,你應該使用常量來避免幻數和整數從更快的比較中受益。 Java只是沒有提供一個合理的方法,除了enum工作圓以外。 – 2014-11-10 10:25:12