Java中输入无效时返回上一步不重启程序及Scanner双回车问题解决
问题修复方案
核心问题原因
你修改后的会员等级输入代码中,在do-while循环外多写了一次sc.nextLine()调用,这行代码会在输入身份证号之后额外等待一次用户输入,因此才需要按两次回车才能进入会员等级输入环节。
修复代码
只需要删掉会员等级部分do-while循环外面的String membership_level = sc.nextLine();这行即可,修改后的完整会员等级输入代码如下:
// 会员等级输入 boolean isMemLvlInvalid = false; String memLvl = "default"; String membership_level; // 仅声明变量,不要在此处调用nextLine方法 do{ isMemLvlInvalid = false; System.out.println("请输入你想要注册的会员等级:输入G代表黄金会员、P代表铂金会员、D代表钻石会员(仅允许输入G/P/D)"); membership_level = sc.nextLine(); if (membership_level.equals("G")) { memLvl = "Gold"; } else if (membership_level.equals("P")) { memLvl = "Platinum"; } else if (membership_level.equals("D")) { memLvl = "Diamond"; } else { System.out.println("输入无效,请重新输入正确的会员等级选项"); isMemLvlInvalid = true; } } while(isMemLvlInvalid);
额外优化建议
- 不要重复创建Scanner对象:原有代码外层已经创建了
Scanner input = new Scanner(System.in);,内层又创建了Scanner sc = new Scanner(System.in);属于多余操作,全程复用同一个Scanner实例即可,避免资源浪费。 - 姓名、身份证号也可以参照相同的循环逻辑做合法性校验,比如身份证号可以校验长度、格式是否符合YYMMDDPB###G的规则,校验不通过就循环重新输入,匹配你要求的任意输入无效时重复对应输入步骤的需求。
内容的提问来源于stack exchange,提问作者Asriel Teh
相关产品推荐
相关产品推荐

