无法在Java中使用switch语句中的值?
在main方法下面的单独方法中使用switch语句中的值时遇到问题。如何获得它,以便使用我试图从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
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可能只是粘贴到您的方法中,但他们会理解它为什么有效吗?