Java Switch语句和双值

Java Switch语句和双值,java,switch-statement,Java,Switch Statement,我正在学习如何使用switch语句。我正试图创建一个购物车的项目出售在杂货店。我必须创建一个程序,将售出物品的价值相加,然后打印最终价值。这是我到目前为止所做的,但是当我终止我的程序时,我得到了一个错误,它没有显示最终的值 非常感谢您的帮助 package Exercises; import java.util.Scanner; public class CalculatingSales { public static void main(String[] args) {

我正在学习如何使用switch语句。我正试图创建一个购物车的项目出售在杂货店。我必须创建一个程序,将售出物品的价值相加,然后打印最终价值。这是我到目前为止所做的,但是当我终止我的程序时,我得到了一个错误,它没有显示最终的值

非常感谢您的帮助

package Exercises;

import java.util.Scanner;

public class CalculatingSales {

    public static void main(String[] args) 
    {
        int total = 0;
        int prod1Count = 0, prod2Count = 0, prod3Count = 0, prod4Count = 0, prod5Count = 0;

        Scanner input = new Scanner(System.in);

        System.out.printf("%s%n%s%n    %s%n    %s%n    %s%n","Enter product number sold: "  //prompt user to enter input
                ,"NOTE: Product number must be between 1 & 5",
                "To terminate input... ",
                "On UNIX/Linus?mac OS X type <Ctrl> d then press Enter",
                "On Windows type <Ctrl> z then press Enter");

        while(input.hasNext())
        {
            int item = input.nextInt();
            total =+ item;

            double product1;
            double product2;
            double product3;
            double product4;
            double product5;

            switch (item + total)
            {
                case 1:
                    product1 = 2.98;
                    ++prod1Count;
                    break;

                case 2:
                    product2 = 4.50;
                    ++prod2Count;
                    break;

                case 3:
                    product3 = 9.98;
                    ++prod3Count;
                    break;

                case 4:
                    product4 = 4.49;
                    ++prod4Count;
                    break;

                case 5:
                    product5 = 6.87;
                    ++prod5Count;
                    break;

                default:
                    System.out.println("ERROR. You did not enter a value between 1 & 5!");
                    break;

            }//end switch   

        }//end while

        double shoppingCart = (double) total;

        System.out.printf("%nTotal retail value of all products is: $%d", shoppingCart);
    }   
}
成套练习;
导入java.util.Scanner;
公共类计算销售{
公共静态void main(字符串[]args)
{
int-total=0;
int prod1Count=0,prod2Count=0,prod3Count=0,prod4Count=0,prod5Count=0;
扫描仪输入=新扫描仪(System.in);
System.out.printf(“%s%n%s%n%s%s%n%s%n%s%n”,“输入售出的产品编号:”//提示用户输入
,“注意:产品编号必须介于1和5之间”,
“要终止输入…”,
“在UNIX/Linus?mac OS X上键入d,然后按Enter键”,
“在Windows上键入z,然后按Enter”);
while(input.hasNext())
{
int item=input.nextInt();
总数=+项;
双产品1;
双产品2;
双产品3;
双产品4;
双产品5;
开关(项目+总计)
{
案例1:
产品1=2.98;
++生产计数;
打破
案例2:
产品2=4.50;
++产品计数;
打破
案例3:
产品3=9.98;
++生产3计数;
打破
案例4:
产品4=4.49;
++生产4计数;
打破
案例5:
产品5=6.87;
++生产5计数;
打破
违约:
System.out.println(“错误。您没有输入介于1和5之间的值!”);
打破
}//终端开关
}//结束时
双倍购物车=(双倍)总计;
System.out.printf(“%n所有产品的总零售价值为:$%d”,shoppingCart);
}   
}
问题在于:

System.out.printf("%nTotal retail value of all products is: $%d", shoppingCart);
printf
需要一个
int
,但您正在传递一个
double
作为参数

试试这个:

System.out.printf("%nTotal retail value of all products is: $%.2f", shoppingCart);

您还应该更改
total=+项至<代码>总计+=项目

该代码存在许多问题。最后出现的错误是因为您试图输出一个double并指定一个要打印的整数<代码>$%d
应该是
$%f
,但是要使货币显示到小数点后两位,可以使用
$%.2f
。有关格式设置的详细信息,请参阅本文档

然而,主要的问题在你的循环中。switch语句应该只传递您想要比较的项目编号,并相应地执行一些操作。因此开关必须是
switch(item)
。有一种更简单的方法来计算总数和切换。您可以通过将人员每次通过循环选择的产品的值添加到一个运行的
total
。退出时,它应为所有选定项目的总金额。如果您输入的项目超出范围,则实际上会添加0

最后,您确实应该关闭扫描仪以进行适当的清理,因此
input.close()
也是一个好主意

代码可能类似于:

package Exercises;

import java.util.Scanner;

public class CalculatingSales {

    public static void main(String[] args) 
    {
        double total = 0.0;

        Scanner input = new Scanner(System.in);

        System.out.printf("%s%n%s%n    %s%n    %s%n    %s%n","Enter product number sold: "  //prompt user to enter input
                ,"NOTE: Product number must be between 1 & 5",
                "To terminate input... ",
                "On UNIX/Linus?mac OS X type <Ctrl> d then press Enter",
                "On Windows type <Ctrl> z then press Enter");

        while(input.hasNext())
        {
            double prodvalue = 0.0;

            int item = input.nextInt();

            switch (item)
            {
                case 1:
                    prodvalue = 2.98;
                    break;

                case 2:
                    prodvalue = 4.50;
                    break;

                case 3:
                    prodvalue = 9.98;
                    break;

                case 4:
                    prodvalue = 4.49;
                    break;

                case 5:
                    prodvalue = 6.87;
                    break;

                default:
                    System.out.println("ERROR. You did not enter a value between 1 & 5!");
                    break;

            }//end switch   

            total += prodvalue;

        }//end while

        double shoppingCart = total;

        System.out.printf("%nTotal retail value of all products is: $%.2f", shoppingCart);
        input.close();
    } 
}
成套练习;
导入java.util.Scanner;
公共类计算销售{
公共静态void main(字符串[]args)
{
双倍合计=0.0;
扫描仪输入=新扫描仪(System.in);
System.out.printf(“%s%n%s%n%s%s%n%s%n%s%n”,“输入售出的产品编号:”//提示用户输入
,“注意:产品编号必须介于1和5之间”,
“要终止输入…”,
“在UNIX/Linus?mac OS X上键入d,然后按Enter键”,
“在Windows上键入z,然后按Enter”);
while(input.hasNext())
{
双prodvalue=0.0;
int item=input.nextInt();
开关(项目)
{
案例1:
prodvalue=2.98;
打破
案例2:
prodvalue=4.50;
打破
案例3:
prodvalue=9.98;
打破
案例4:
prodvalue=4.49;
打破
案例5:
prodvalue=6.87;
打破
违约:
System.out.println(“错误。您没有输入介于1和5之间的值!”);
打破
}//终端开关
总+=产品价值;
}//结束时
双购物车=总计;
System.out.printf(“%n所有产品的总零售价值为:$%.2f”,shoppingCart);
input.close();
} 
}
有很多更好的方法可以做到这一点,但随着时间的推移,你可能会学到如何简化这个程序。我想让代码保持某种结构,就像您处理事情的方式一样


如果您需要每个项目的计数,那么您必须修改上面的代码以将其添加回。我意识到这个解决方案可能过于简化了您的需求,但在基本层面上,它保持了总体正确。

它应该是
total+=item