切换语句和双精度值

时间:2014-09-27 01:43:48

标签: java switch-statement

我正在学习如何使用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);
    }   
}

2 个答案:

答案 0 :(得分:2)

问题在于:

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 =+ item;更改为total += item;

答案 1 :(得分:0)

代码存在许多问题。最后的错误是因为您尝试输出double并指定要打印的整数。 $%d应为$%f,但要显示两个小数位,您可以使用$%.2f。有关格式化的更多信息,请参阅此documentation

主要问题在于你的循环。 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();
    } 
}

有更好的方法可以做到这一点,但随着时间的推移,你可能会了解如何简化这个程序。我想让代码保持一定的结构,就像你处理事物一样。

如果您需要每个单独项目的计数,那么您将不得不修改上面的代码以重新添加它们。我意识到这个解决方案可能已经过度简化了您所需要的但在基本级别它保持总体正确。< / p>