也青给我锁死 2020-05-09 21:52 采纳率: 33.3%
浏览 379
已采纳

Scanner对象读取无效,直接跳过了控制台输入

import java.io.IOException;
import java.util.Scanner;

public class Show {
    public void showMainMenu()throws IOException{
        System.out.println("****************************");
        System.out.println("** 欢迎来到我们的餐饮管理系统  **");
        System.out.println("****************************");
        //定义一个循环标志位
        boolean flag = true;
        //创建对象调用方法
        ManageMenu menu =new ManageMenu();
        VegeInfor infor = new VegeInfor();
        Scanner reader = new Scanner(System.in);//这个读字符类型的
        Scanner reader02 = new Scanner(System.in);
        while(flag){        
            System.out.println("    主菜单");
            System.out.println("1.菜单管理");
            System.out.println("2.财务管理");
            System.out.println("3.人事管理");
            System.out.println("4.食材管理");
            System.out.println("5.退出本系统");
            System.out.println("请选输入要进行的项目编号:");

            int num = reader.nextInt();

            switch(num){
            case 1:{
                System.out.println("1.添加新菜");
                System.out.println("2.添加饮料");
                System.out.println("3.删除菜品");
                System.out.println("4.更改价格");
                System.out.println("请选择:");
                int num02 = reader.nextInt();
                switch(num02){
                case 1:{
                    System.out.println("请输入菜名:");
                    String vname = reader.nextLine();
                    System.out.println("请输入价格:");
                    double vprice =reader02.nextDouble();
                    System.out.println("请输入菜品:");
                    String vtype = reader.nextLine();
                    infor = new VegeInfor(vname,vprice,vtype);//给构造函数送值
                    menu.addNewMeal(infor);
                }
                }//switch

            }
            }
        }
    }
}

运行结果:


** 欢迎来到我们的餐饮管理系统 **


主菜单

1.菜单管理
2.财务管理
3.人事管理
4.食材管理
5.退出本系统
请选输入要进行的项目编号:
1
1.添加新菜
2.添加饮料
3.删除菜品
4.更改价格
请选择:
1
请输入菜名:
请输入价格:

就是到这出现了问题,没有输入菜名直接要输入价格

  • 写回答

2条回答 默认 最新

  • Explosion_M 2020-05-09 23:26
    关注

    这是因为nextInt方法不会丢弃换行符,输入的换行符还留在缓冲流中,所以下一次调用nextLine时这个遗留回车就被直接读取了,所以要先把这个换行符丢弃

    case 1:{
                    System.out.println("1.添加新菜");
                    System.out.println("2.添加饮料");
                    System.out.println("3.删除菜品");
                    System.out.println("4.更改价格");
                    System.out.println("请选择:");
                    int num02 = reader.nextInt();
                    switch(num02){
                    case 1:{
                        System.out.println("请输入菜名:");
                                            reader.nextLine();//丢弃换行符
                        String vname = reader.nextLine();
                        System.out.println("请输入价格:");
                        double vprice =reader02.nextDouble();
                        System.out.println("请输入菜品:");
                        String vtype = reader.nextLine();
                        infor = new VegeInfor(vname,vprice,vtype);//给构造函数送值
                        menu.addNewMeal(infor);
                    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何实验stm32主通道和互补通道独立输出
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题