有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将多个开关变量组合成一个字符串

我将创建一个显示完整收据(加上包含的所有项目)的程序但是,当选择两个相同的项目时,输出为: 4套餐价格 5套餐价格

而不是: 9套餐价格

可以合并两个相同的开关箱吗?我试过一个计数器,但仍然不起作用。我不知道这背后还有什么逻辑

import java.text.NumberFormat;
import java.util.Scanner; 

public class Menu {
public static void main(String args []){

    final double COFFEE= 1.8, SOFTDRINK = 2.0;
    final double STARTER= 4.0, DESSERT= 3.5;
    final double MAIN= 8.0;
    final double COMBO1 = 11.0, COMBO2= 11.5, COMBO3 = 15.0;
    double sum=0;
    int item = 0, quantity=0;
    int freeSoftDrink=0, freeCoffee=0;
    String order="";
    char decide= 'N';
    boolean quit= false;

    Scanner sc = new Scanner (System.in);
    NumberFormat format= NumberFormat.getInstance();
    format.setMaximumFractionDigits(2);
    format.setMinimumFractionDigits(2);

    do{
        System.out.println("------------------ MENU ------------------");
        System.out.println("ITEM"+"\t\t\t\tPRICE");
        System.out.println("1.Coffee"+"\t\t\t"+"RM1.80");
        System.out.println("2.Soft Drink"+"\t\t\t"+"RM2.00");
        System.out.println("3.Dessert"+"\t\t\t"+"RM3.50");
        System.out.println("4.Starter"+"\t\t\t"+"RM4.00");
        System.out.println("5.Main Course"+"\t\t\t"+"RM8.00");
        System.out.println("6.Main+Dessert"+"\t\t\t"+"RM11.00");
        System.out.println("7.Main+Starter"+"\t\t\t"+"RM11.50");
        System.out.println("8.Combo(Main+Starter+Dessert)"+"\t"+"RM15.00");
        System.out.println("-----------------------------------------");
        System.out.print("Select an item: ");
        item = sc.nextInt();


        if ((item<=8) && (item>=1)){
           System.out.print("Enter quantity (1-50): ");
           quantity = sc.nextInt();
        }

        while (((quantity<=0) || (quantity>=51)) && ((item<=8) && (item>=1)))
        {
            System.out.print("Invalid. Please re-enter quantity: ");
            quantity = sc.nextInt();

        }//end while    


        switch(item){

            case 1:
                System.out.println("You've ordered: "+quantity+" Coffee.\n");
                sum=sum+(quantity*COFFEE);
                order=order.concat(quantity +" Coffee\t\t\t"+"RM"
                        +format.format(quantity*COFFEE)+"\n");
                break;

            case 2:
                System.out.println("You've ordered: "+quantity+" Soft Drink.\n");
                sum=sum+(quantity*SOFTDRINK);
                order=order.concat(quantity+" Soft Drink\t\t\t"+"RM"
                        +format.format(quantity*SOFTDRINK)+"\n");
                break;


            case 3:
                System.out.println("You've ordered: "+quantity+" Dessert.\n");
                sum=sum+(quantity*DESSERT);
                order=order.concat(quantity+ " Dessert\t\t\t" +"RM"
                        +format.format(quantity*DESSERT)+"\n");
                break;

            case 4:
                System.out.println("You've ordered: "+quantity+" Starter.\n");
                sum=sum+(quantity*STARTER);
                order=order.concat(quantity+" Starter\t\t\t" 
                        +"RM"+format.format(quantity*STARTER)+"\n");
                break;

            case 5:
                System.out.println("You've ordered: "+quantity+" Main.\n");
                sum=sum+(quantity*MAIN);
                order=order.concat(quantity+" Main\t\t\t\t" + "RM"
                        +format.format(quantity*MAIN)+"\n");
                break;

            case 6:
                System.out.println("You've ordered: "+quantity+" Main+Dessert.\n");
                sum=sum+(quantity*COMBO1);
                order=order.concat(quantity+" Main+Dessert\t\t\t"
                        +"RM"+format.format(quantity*COMBO1)+"\n"); 
                freeCoffee = freeCoffee + quantity;
                break;

            case 7:
                System.out.println("You've ordered: "+quantity+" Main+Starter.\n");
                sum=sum+(quantity*COMBO2);
                order=order.concat(quantity+" Main+Starter\t\t\t"+"RM"
                        +format.format(quantity*COMBO2)+"\n");
                freeSoftDrink = freeSoftDrink + quantity;

                break;

            case 8:
                System.out.println("You've ordered: "+ quantity+" Combo.\n");
                sum=sum+(quantity*COMBO3);
                order=order.concat(quantity+" Combo"+" \t\t\t"
                        +"RM"+format.format(quantity*COMBO3)+"\n");
                freeSoftDrink = freeSoftDrink + quantity;
                freeCoffee = freeCoffee + quantity;

                break; 

            default:
                System.out.println("Invalid item.");
        }//end switch


        System.out.println("Do you want anything else? [Y/N]");
        decide= sc.next().charAt(0);
        System.out.println("");


        while ((decide!='N' && decide!='n') && (decide!='Y' && decide!='y')){
        System.out.print("Invalid. Try again: ");
        decide=sc.next().charAt(0);
        System.out.println(""); 
        }

        if (decide=='N'|| decide =='n'){
            quit=true;  
        }

    }//end do

    while(!quit);

    System.out.println();
    System.out.println("Orders");
    System.out.println("--------------------------------------------");
    System.out.print(order);

    if (freeCoffee<=0){
        System.out.print("");
    }
    else {
        System.out.println("*free "+ freeCoffee + " coffee.");
    }
    if (freeCoffee<=0){
        System.out.print("");
    }
    else{
        System.out.println("*free "+ freeSoftDrink + " soft drinks.");
    }

    System.out.println("--------------------------------------------");
    System.out.println ("Your total bill\t\t\tRM"+ format.format(sum));
    System.out.println("--------------------------------------------");

 }//end main
}//end class

共 (1) 个答案

  1. # 1 楼答案

    导致问题的具体原因是: order=order.concat(quantity+"Main+Dessert\t\t\t"+"RM"+format.format(quantity*COMBO1)+"\n");

    每次新的组合出现时,它都会附加到字符串中,而不是添加到组合成本中(如果已经存在)

    我能想到的一个可能的修复方法是,将每个项的状态存储在HashMap中。因此,您的案例陈述将如下所示:

    Map<String, Integer> orderMap = new HashMap<>();
    case 6:
      System.out.println("You've ordered: "+quantity+" Main+Dessert.\n");
      sum=sum+(quantity*COMBO1);
      orderMap.containsKey("Combo")
        ? orderMap.put("Combo", orderMap.get("Combo") + sum) // if the key already exists then we add to the sum otherwise we create a new entry.
        : orderpMap.put("Combo", sum);
      freeCoffee = freeCoffee + quantity;
      break;
    

    然后您可以收集所有订单值并将其打印在收据中:

    orderMap.entrySet().forEach(entry -> System.out.println(entry.getKey() + ": " + entry.getValue);

    它将打印如下内容:

    Starter: 2
    Combo: 9