Java餐厅点餐程序无输出问题求助:需更新循环变量
餐厅点餐程序无输出问题排查与修复
嘿,我来帮你搞定这个问题!你的程序没输出还收到「需在循环中更新变量」的提示,核心是代码执行顺序颠倒+循环变量未更新+运算符误用这几个点,咱们逐个拆解:
问题1:程序卡在输入等待,根本没到打印菜单的步骤
你现在的代码在进入do-while循环之前,就先执行了两次c.next()读取输入:
char choice = c.next().charAt(0); char c_choice = c.next().charAt(0);
程序运行到这里会直接阻塞,等待你输入两次内容,但你可能以为程序会先显示菜单再让你选,所以一直等着程序输出,程序却在等你输入——这就是「无任何输出」的直接原因!
问题2:循环中未更新判断变量,违反提示要求
你的do-while循环判断条件依赖choice变量,但循环体里完全没有重新读取用户的新输入来更新choice。就算侥幸进入循环,也会因为choice值不变,要么无限循环要么直接跳出,完全不符合交互式点餐的逻辑。
问题3:逻辑判断运算符误用
你用了按位或运算符|来判断choice < '1' | choice > '6',这里应该用逻辑或运算符||,虽然某些情况下结果可能一样,但逻辑或会短路求值,更符合业务逻辑的写法。
修正后的核心代码片段
把输入读取放到循环体内部,确保先显示菜单再获取用户选择,同时更新循环变量:
Scanner c = new Scanner(System.in); char choice; // 先声明,不提前初始化 do { // 先打印菜单(这才是正确的顺序!) System.out.println("Welcome to Dripp!"); System.out.println("Please choose from one of our signature creations or create your own!"); System.out.println("1. Oreo Overload $6.99"); System.out.println("2. Birthday Cake Remix $6.99"); System.out.println("3. Chocolate Devotion $6.99"); System.out.println("4. Strawberry Blonde $6.99"); System.out.println("5. Founders Favorite $6.99"); System.out.println("6. Create Your Own!"); // 在循环内读取用户选择,更新判断变量 choice = c.next().charAt(0); // 可选:如果输入不符合要求,提示用户 if (choice < '1' || choice > '6') { System.out.println("Invalid choice! Please enter a number between 1-6."); } } while (choice < '1' || choice > '6'); // 用逻辑或|| // 接下来执行switch逻辑 System.out.println(); switch (choice) { case '1': System.out.println("Ingredients: Sweet Cream Ice Cream with Chocolate Chips, double the OREO® Cookies and Fudge"); // 别忘了加break和其他case的逻辑 break; // 补充其他case... } // 最后记得关闭Scanner c.close();
额外提示
- 你提前声明的
c_choice变量目前没用到,应该放到嵌套switch(自定义餐品)的逻辑里再读取,不要提前读取导致额外的输入阻塞。 - switch的每个case都要加
break,避免贯穿执行。
内容的提问来源于stack exchange,提问作者umerdino
相关产品推荐
相关产品推荐

