Java 无法打印我在开关盒上分配的值

Java 无法打印我在开关盒上分配的值,java,Java,我声明了一个变量,并试图在switch语句中为其赋值。当我试图打印它时,它说它还没有初始化。在上下文中,我试图打印某种收据作为输出。代码如下: public static void main(String[] args) { Scanner scan = new Scanner(System.in); int price; int quantity; int totalprice; System.out.println("-----

我声明了一个变量,并试图在switch语句中为其赋值。当我试图打印它时,它说它还没有初始化。在上下文中,我试图打印某种收据作为输出。代码如下:

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    
    int price;
    int quantity;
    int totalprice;

    System.out.println("--------------------------------------------");
    System.out.println("!Welcome to FoodRhino Services!");
    System.out.println("--------------------------------------------");
    System.out.println("Please enter your name:");
    String name = scan.next();
    System.out.println("Please enter your address:");
    String address = scan.next();
    System.out.println("Please enter your contact number:");
    int cntcnum = scan.nextInt();
    System.out.println("--------------------------------------------");
   
    System.out.println("--------------------------------------------");
    System.out.println("Welcome " + name + ", " + "please pick a restaurant");
    System.out.println("--------------------------------------------");
    System.out.println("(1) Burger King");
    System.out.println("(2) Mcdonalds");
    System.out.println("(3) Arbys");
    System.out.println("(4) Goldilocks");
    System.out.println("(5) Papa Johns");
    System.out.println("--------------------------------------------");
    System.out.println("Pick a number:");
    int restonum = scan.nextInt();
    System.out.println("--------------------------------------------");

    switch (restonum) {
        case 1:
            System.out.println("--------------------------------------------");
            System.out.println("Choose a product");
            System.out.println("--------------------------------------------");
            System.out.println("(BK01) 4 Cheese Whopper - $129");
            System.out.println("(BK02) Double Whopper with Cheese - $159");
            System.out.println("(BK03) Bacon Cheese Burger - $179");
            System.out.println("--------------------------------------------");
            System.out.print("Enter Product Code: ");
            String bkpc = scan.next();
            System.out.print("How many: ");
            quantity = scan.nextInt();
            System.out.println("--------------------------------------------");
             if(bkpc == "BK01")
                price = 129;
             if(bkpc == "BK02")
                price = 159;
             if(bkpc == "BK03") 
                price = 179;
            
            break;
        case 2:
            System.out.println("--------------------------------------------");
            System.out.println("Choose a product");
            System.out.println("--------------------------------------------");
            System.out.println("(MCD01) Big Mac - $190");
            System.out.println("(MCD02) Chicken Mcnuggets - $180");
            System.out.println("(MCD03) Filet-o-fish - $155");
            System.out.println("--------------------------------------------");
            System.out.print("Enter Product Code: ");
            String mcdpc = scan.next();
            System.out.print("How many: ");
            quantity = scan.nextInt();
            System.out.println("--------------------------------------------");
             if(mcdpc == "MCD01")
                price = 190;
             if(mcdpc == "MCD02")
                price = 180;    
             if(mcdpc == "MCD03") 
                price = 155;
            break;
        case 3:
            System.out.println("--------------------------------------------");
            System.out.println("Choose a product");
            System.out.println("--------------------------------------------");
            System.out.println("(ARB01) Smokehouse Brisket - $357");
            System.out.println("(ARB02) Greek Gyro - $430");
            System.out.println("(ARB03) Loaded Italian - $412");
            System.out.println("--------------------------------------------");
            System.out.print("Enter Product Code: ");
            String arbpc = scan.next();
            System.out.print("How many: ");
            quantity = scan.nextInt();
            System.out.println("--------------------------------------------");
             if(arbpc == "ARB01")
                price = 357;
             if(arbpc == "ARB02")
                price = 430;    
             if(arbpc == "ARB03") 
                price = 412;
            
            break;
        case 4:
            System.out.println("--------------------------------------------");
            System.out.println("Choose a product");
            System.out.println("--------------------------------------------");
            System.out.println("(GLDCK01) Large Chocolate Mousse - $99");
            System.out.println("(GLDCK02) Brazo De Mercedes - $102");
            System.out.println("(GLDCK03) Black Forest Cake - $285");
            System.out.println("--------------------------------------------");
            System.out.print("Enter Product Code: ");
            String gldckpc = scan.next();
            System.out.print("How many: ");
            quantity = scan.nextInt();
            System.out.println("--------------------------------------------");
             if(gldckpc == "GLDCK01") {
                price = 99;  }
             if(gldckpc == "GLDCK02") {
                price = 102;  }   
             if(gldckpc == "GLDCK03") {
                price = 285; }
            break;
        case 5:
            System.out.println("--------------------------------------------");
            System.out.println("Choose a product");
            System.out.println("--------------------------------------------");
            System.out.println("(PPJ01) Large Pepperoni Pizza - $75");
            System.out.println("(PPJ02) Smoked Hawaiian Pizza - $90");
            System.out.println("(PPJ03) Cheesy Crust Pizza - $65");
            System.out.println("--------------------------------------------");
            System.out.print("Enter Product Code: ");
            String ppjpc = scan.next();
            System.out.print("How many: ");
            quantity = scan.nextInt();
            System.out.println("--------------------------------------------");
             if(ppjpc == "PPJ01") {
                price = 75; }
             if(ppjpc == "PPJ02") {
                price = 90;}    
             if(ppjpc == "PPJ03") {
                price = 65; }
            
            break;
        default:
                break;
    }
   
    System.out.println(price);
    
}

请原谅我混乱的代码,因为我几个月前才开始学习编程。英语也不是我的第一语言,如果我没有把我的问题说清楚,我很抱歉。如果还有更好的方法来做我想做的事情,请说。

当没有一个开关情况满足时会发生什么?您将尝试打印未初始化的变量。这是不允许的,编译器会告诉你的

只需将其初始化为某个默认值:

int price = 0;

最基本的问题是,您没有在代码的每个可能路径上为price赋值。价格没有任何价值,也有可能走到尽头

例如,在案例1中,如果bkpc不是BK01、BK02或BK03,该怎么办?你说不会吧?当然可以:它是用户输入,并且您没有错误检查。但即使不是用户输入,也需要进行错误检查

如果这些情况被认为不可能发生,而不是不可能发生,那么最快的解决办法可能是将“价格”初始化为不可能的东西,比如负1,然后在最后:

if (price < 0) 
    System.out.println("Bad input"); // there may be better wording!
else
    System.out.println(price);

您还有一个字符串比较问题,需要解决,但这并不能改变没有错误处理的基本问题。

您要打印到哪里?最后一行代码,除了右括号。我的导师要求在网上订购食品时提供类似收据的输出。代码还很不完整,但是的,我上一次尝试打印它。我确实尝试过打印,但它显示的是0,而不是我想打印的值,这是我在开关盒中指定的值。@ItsuDemo:这些开关盒中的逻辑似乎有一个单独的问题。ifbkpc==BK01不是您想要的方式。@ItsuDemo如果您只想在开关盒中赋值时打印,则必须将print语句放入每个开关盒中。或者加上默认情况,我明白了。将尝试使用.equals,然后查看它是否有效。谢谢你的邀请responses@AndyTurner-足以检测到您尚未指定价格;看看我的答案。有一个论点是,如果你只在一个地方打印,它会更简单/更容易理解,但这可能归结为opnionI也试图弄清楚这一点,但这不是我的优先考虑。我会尝试你所做的解决方案谢谢。