一个关于try....catch语句和switch.......case语句的综合问题

陪你到永远 2015-08-16 02:47:05
/*
写的一个账户注册登录的程序,我用了数据库建立了注册用户信息表
*/
public void loginChoose(){
int index = 0;
System.out.println("请选择你的操作,选择1进行注册,选择2进行登录");

try{
index = input.nextInt();
}catch(Exception e){
input.next();
System.out.println("输入的不符合要求,请重新输入");
loginChoose();
}
switch(index){
case 1:
new Register().startRegister();//注册方法
case 2:
new Login().loginCheck();//登录方法
break;
default:
System.out.println("输入的不符合要求,请重新输入");
loginChoose();
}
}

我的思路是:输入的是字符,则抓类型不匹配异常,然后递归重新选择,输入1则选择注册,因为我去掉了case1语句后面的break,所以并不会终止switch,而是紧接着执行case2语句,执行账户登录,case2语句后面有break,所以直接选择case2登录完后会直接终止switch,不会再执行下面的default语句。结果我测试了下出现以下几种情况:
一.
一开始输入选择时,如果不输入字符串造成异常,也就是输入1或2数字的话,程序完整运行,没出现什么bug。
二.
这个就是出现bug的情况,也是楼主一直想不明白的地方。就是如果一开始输入字符串,触发catch语句抓异常,
然后递归回去再输入1或者2注册、登录,执行完case2语句后,提示登录成功,然后紧接着却又执行了default语句,再次递归回去了,我想不明白的是,为何会执行了default语句,case2后面有break就终止了switch了的。
三.
针对上面的问题,想了很久,一直没解决到,后来我就把switch整个语句也放进了try.............catch语句里,结果这个bug没有了,程序正常运行,我想问的是,我之前的程序究竟有什么逻辑问题?
...全文
612 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
陪你到永远 2015-08-18
  • 打赏
  • 举报
回复
进入catch语句后,执行的input.next()就将输入的字符串丢弃了,然后递归回到方法的开头,重新执行方法,再次提示你输入新的数字,怎么会执行完loginChoose();后又执行default呢?
梁金晶 2015-08-16
  • 打赏
  • 举报
回复
Case1的语句块最后添加加breaK
bree06 2015-08-16
  • 打赏
  • 举报
回复
因为执行catch之后程序并没有结束。在catch块中执行了loginChoose();方法后又继续往下走,因为字母不是1,2所以走default又走了一次loginChoose();

51,407

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧