2013-02-26 250 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