3

我不知道是什么导致了这个错误。我和我的老师检查了一遍,找不到问题所在。

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);
    }
}

它在编译时抛出“需要常量表达式”错误,它指向 case p: 行,但是,如果我切换它们,它也会为 f: 抛出它,所以我必须完全关闭它们。

4

3 回答 3

10

是的,case表达式必须是常量(或枚举常量名称)——您不能使用变量。有关详细信息,请参阅Java 语言规范第 14.11 节(switch 语句)。(您甚至还没有初始化变量,所以说实话,不清楚您期望发生什么。)

你的意思:

case 'p':
    ...

case 'f':
    ...

? 这会将您的输入 ( type) 与字符文字 'p''f'.

(顺便说一句,如果这难倒了你的老师,我担心他们是否适合教 Java。这是相当基本的东西。)

于 2013-02-26T14:14:07.183 回答
1

您不能在 case 语句中使用变量,它必须是文字字符(例如'p', 'f')。

于 2013-02-26T14:14:44.223 回答
1

In case 语句
您应该只使用 (字符开关) 或 (数字开关)
例如
您可以使用 (字符开关)

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

不是

switch (type) {
case p:
.......
case f:
......
}
于 2013-02-26T14:23:17.650 回答