【问题标题】:How do I print the bought items at the time of bill?如何在账单时打印购买的商品?
【发布时间】:2017-06-03 21:25:43
【问题描述】:

我想在打印账单时打印我在 starters 方法中订购的数量。关于我将如何做的任何建议?我只写了我的程序的一个实例,因为它整个问题非常大。

提前致谢。

    static void Bill()
    {

        System.out.println("\f");
        System.out.println("*********************************************************");
        System.out.println("*********************************************************");
        System.out.println("**************************BILL***************************");
        System.out.println(ob);
        System.out.println("Your phone number - "+j);
        int Z = (int)(Math.random()*10000000);
        System.out.println("Bill number is "+Z);
        System.out.println("The total bill amount is Rs."+sum);
        System.out.println();
        System.out.println("Hope you enjoyed. Visit us again soon!");
        Food=0; 
    }

        static void Starters()
    {
        System.out.println("You have selected Starters");
        System.out.println();
        System.out.println("1. Spring Rolls               - Rs 350");
        System.out.println("2. Onion Rings                - Rs 350");
        System.out.println("3. Fried Raviolli             - Rs 400");
        System.out.println("4. Gorgonzola                 - Rs 400");
        System.out.println("5. Fresh Ricotta Crostini     - Rs 475");
        System.out.println("6. Potato Fritters            - Rs 500");
        System.out.println();
        System.out.println("Enter your desired option");
        starterOption=sc.nextInt();
        System.out.println("Enter quantity");
        quantity=sc.nextInt();
        switch(starterOption)
        {
            case 1:
            s1 = quantity * 350;
            break;
            case 2:
            s2 = quantity * 350;
            break;
            case 3:
            s3 = quantity * 400;
            break;
            case 4:
            s4 = quantity * 400;
            break;
            case 5:
            s5 = quantity * 475;
            break;
            case 6:
            s6 = quantity * 500;
            break;
            default:
            System.out.println("You haven't ordered anything");
            break;
        }
        System.out.println("Do you want to order anything else? Y/N");
        A = sc1.next();
        if(A.equalsIgnoreCase("Y"))
        {
            System.out.println("Do you want to order from the same section? Y/N ");
            F=sc.next();
            if(F.equalsIgnoreCase("Y"))
            {
                sum=s1+s2+s3+s4+s5+s6;
                Starters();
            }
            else
            {
                sum=s1+s2+s3+s4+s5+s6;
                Food_Items();
            }
        }
        else
        {
            sum=s1+s2+s3+s4+s5+s6;
            Bill();
        }
    }

【问题讨论】:

  • 代码很长。
  • 您还应该保存客户订购的商品 - 而不仅仅是总价......就是这样。还阅读 java 的 Collections ,你有太多的变量。 docs.oracle.com/javase/7/docs/api/java/util/Collections.html
  • 请告诉我是否有问题或违反本网站的规则,而不是直接否决我的问题。我是这个网站的新手!
  • 没有其他出路 这真的不是真的。也许你应该考虑一种不同的方法,正如我所说,使用 java 必须提供的多种类型的集合...很遗憾,我们无法为您编写完整的解决方案....

标签: java methods switch-statement bluej


【解决方案1】:

如上所述:对于一个非常简单的问题,这是一个很长的代码。

当您想打印订购的内容时,您必须将其保存在变量中,例如数组。或如集合中建议的那样,例如一个列表。您可以以与您相同的方式扩展您的代码。但强烈建议您优化代码。

【讨论】:

    【解决方案2】:

    我建议使用HashMap,阅读教程中的示例in this link

    您的问题可能的解决方案是:-

    在类中声明变量,最好是'private'

    private static HashMap<String, Integer> Starters    = new HashMap<String, Integer>();
    private static HashMap<String, Integer> Orders      = new HashMap<String, Integer>();
    

    使用一些初始化函数或类的构造函数初始化这些,并使用 Startres 的所有可能值

    Starters.put("Spring Rolls", 350);
    Starters.put("Onion Rings", 400);
    

    在您可以使用的 Starters() 函数中(精简示例)

        System.out.println("You have selected Starters");
        System.out.println();
        int i = 1;
        String[] mystarters = Starters.keySet().toArray(new String[Starters.keySet().size()]);
        for (String starter : mystarters) {
            System.out.println(i++ + ". " + starter + " : Rs. " + Starters.get(starter));
        }
    
        System.out.println("Enter your desired option");
        //get option
        System.out.println("Enter quantity");
        //get quantity
        // I am using s. as a prefix for starters, for Main course you could use m. or mc. or something
        Orders.put("s." + mystarters[option - 1], quantity);
    

    当然,如果订单中已经存在这个 Starter,你可以获取 Quantity 并添加到现有数量,或者询问是否需要覆盖。

    // example
    if(Orders.containsKey("s." + mystarters[option - 1]))
       Orders.put(("s." + mystarters[option - 1]), Orders.get("s." + mystarters[option - 1])+quantity);
    else
       Orders.put("s." + mystarters[option - 1], quantity);
    

    在 Bill 中,您可以使用以下内容:-

        int sum = 0;
        for (String orderItem : Orders.keySet()) {
            int price = 0;
            int quant = Orders.get(orderItem);
            if (orderItem.startsWith("s.")) {
                orderItem = orderItem.substring(2);
                price = Starters.get(orderItem);
                System.out.println(orderItem + " x " + quant + " = Rs. " + price * quant);
            }
            sum += price * quant;
    
        }
    
        System.out.println("Total Price : Rs." + sum);
    

    【讨论】:

      【解决方案3】:

      您可以对代码进行几项改进。如果您想显示账单上的所有元素,您必须存储您已经订购的东西。每次订购时,您都可以将元素添加到List

      您需要将对象存储在列表中,以便为您的菜肴创建一些对象。 Enums 似乎适合您的应用程序,这可能是初学者的一些示例:

      enum Starters {
          SPRING_ROLLS("Spring Rolls", "Rs 350", 5),
          FRIED_RAVIOLLI("Fried Raviolli", "Rs 400", 9),
          ... // All other starters...
      
          String name;
          String code;
          int price;
      
          public Starters(String name, String code, String price) {
              this.name = name;
              this.code = code;
              this.price = price;
          }
      
          public String getName() {
              return name;
          }
      
          public String getCode(){
              return code;
          }
      
          public int getPrice(){
              return price;
          }
      }
      

      然后你像这样显示你的菜单:

      for (Starters starter : Starters.values()) {
          System.out.println(starter.getName() + " " starter.getCode()); // Just an example, modify to fit your format
      }
      

      您将拥有不同类型的枚举,并且您希望将相同类型的对象添加到列表中。您可以为此使用一个接口并让所有枚举来实现该接口:

      public interface Orderable {
          public String getName();
          public String getCode();
          public String getPrice();
      }
      

      你可以这样初始化列表:

      List<Orderable> orders = new ArrayList<>();
      

      并像这样将元素添加到列表中(枚举需要实现 Orderable 接口):

      orders.add(Starters.SPRING_ROLLS);
      order.add(Desserts.CHEESE_CAKE);
      ...
      

      当你想显示账单时,你可以遍历列表并显示订单:

      int totalPrice = 0;
      for (Orderable order : orders) {
          System.out.println(order.getName() + " - " order.getPrice());
          totalPrice += order.getPrice();
      }
      System.out.println("Total price: ");
      

      【讨论】:

        猜你喜欢
        • 2017-05-22
        • 1970-01-01
        • 1970-01-01
        • 2014-11-05
        • 2011-06-08
        • 2020-12-05
        • 1970-01-01
        • 2015-12-09
        • 1970-01-01
        相关资源
        最近更新 更多