Java 无法打印我在开关盒上分配的值
我声明了一个变量,并试图在switch语句中为其赋值。当我试图打印它时,它说它还没有初始化。在上下文中,我试图打印某种收据作为输出。代码如下: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("-----
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也试图弄清楚这一点,但这不是我的优先考虑。我会尝试你所做的解决方案谢谢。