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

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条回答 默认 最新

  • weixin_44077128
    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);
                    }
    
    点赞 评论
  • wojiushiwo945you
    毕小宝 2020-05-10 07:45

    Scanner 对象只能定义一个,否则就容易乱。
    全局用一个 Scanner 对象接收控制台输入试试。

    点赞 评论

相关推荐