无法在Java中使用switch语句中的值?

无法在Java中使用switch语句中的值?,java,switch-statement,return,double,user-input,Java,Switch Statement,Return,Double,User Input,在main方法下面的单独方法中使用switch语句中的值时遇到问题。如何获得它,以便使用我试图从switch语句返回的值?这是我的密码: private static int itemNo; private static double userQuantity; private static double oneTotal, twoTotal, threeTotal, fourTotal, fiveTotal; private static double result; public stat

在main方法下面的单独方法中使用switch语句中的值时遇到问题。如何获得它,以便使用我试图从switch语句返回的值?这是我的密码:

private static int itemNo;
private static double userQuantity;
private static double oneTotal, twoTotal, threeTotal, fourTotal, fiveTotal;
private static double result;

public static void main(String[]args){
    double totalAmount = 0;

    Scanner input = new Scanner(System.in);

    double tA = calculateTotal(itemNo);
    totalAmount += result;

while(true){
    System.out.print("Please enter the item number you wish to use, or enter -1 to stop: ");
    int itemNo = input.nextInt();

    if(itemNo == -1){
        System.out.println("The total value of the purchase is: " + totalAmount);
        break;
    }

    System.out.println("Now please input the quantity of the item you specified above: ");
    double userQuantity = input.nextInt();

}   
    }

public static double calculateTotal(int itemNo){
    double result = 0;

        switch(itemNo){
        case 1:
            double oneTotal = 2.98 * userQuantity;
            break;
        case 2:
            double twoTotal = 4.50 * userQuantity;
            break;
        case 3:
            double threeTotal = 9.98 * userQuantity;
            break;
        case 4:
            double fourTotal = 4.49 * userQuantity;
            break;
        case 5:
            double fiveTotal   = 6.87 * userQuantity;
            break;
        }
    result = oneTotal + twoTotal + threeTotal + fourTotal + fiveTotal;
    return result;
}

我正在尝试获取它,这样它允许用户输入他们想要使用的项目编号,然后输入他们购买的项目数量,然后返回在switch语句中计算的值,以便在结果中使用,这是他们键入“-1”停止程序后打印出来的值。但是,totalAmount保持为零,并且不接受返回的结果值。

Java中的变量的作用域是最接近的
{
}块,在本例中是
开关
语句。这意味着您定义的双精度仅在
开关
内的范围内

total
值保留在
开关
之外,初始设置为
0
,并将变量声明(
double-oneTotal=
等)替换为
total+=
。然后只需返回
total

关于变量范围的一些相关问题:



我还看到你的输入处理被破坏了;您重复地将输入读入
itemNo
,但在读取输入后从未调用
calculateTotal()
。可能很简单,只需在
nextInt()
调用之后移动
calculateTotal()
调用,但您可能需要进行一点实验。

嗯。。。在每个
案例中都有
break
,所有变量都是冗余的

这应该同样有效:

public static double calculateTotal(int itemNo){

        switch(itemNo){
        case 1:
            return (2.98 * userQuantity);
        case 2:
            return (4.50 * userQuantity);
        case 3:
            return (9.98 * userQuantity);
        case 4:
            return (4.49 * userQuantity);
        case 5:
            return (6.87 * userQuantity);
        default:
            return 0;
        }
}

为什么我要返回0?@Fyree我不知道你告诉我这是你的密码。如果未找到匹配的
大小写
,则返回0。@Fyree假设您键入的是
6
,而不是
1
-
5
-在这种情况下,您的代码应该怎么做?返回
0
是一个很好的回退方法。就可读性而言,我只使用默认的大小写,因为它会让您的意图更加清晰。我希望它返回它为用户计算的值。
total=
可以正常工作。代码中的每个
案例
都有一个
中断
。@dimaligin绝对;您建议的重构可能也会起作用,而且更干净。我试图提出微创性的改变,以防有更多我们没有看到的情况发生,希望OP能理解这个建议。你在别人脚下改变的越多,他们就越不可能理解。OP可能只是粘贴到您的方法中,但他们会理解它为什么有效吗?