请教一个处理异常的问题

黑煤碳 2017-05-10 10:37:48
问题:当我输入字符串的时候,程序会一直循环输出catch里面的指令,而不是又重try开始执行


我想让程序可以实现:当我输入字符串的时候或者输入的不是int类型的时候,它会输出catch里面的代码,并且重try哪里开始执行,而不是一直重复输出catch里面的代码!

import java.util.Scanner;
public class Excep{
static Scanner jd=new Scanner(System.in);
public static void main(String[] args){
while(true){
int on=0;//判断是否输入成功!
try{
int bb=jd.nextInt();
on=999;
}
catch(Exception e){
System.out.println("输入有误请重新输入");
}
if(on==999){//成功就跳出while循环
System.out.println("定义数字成功!");
break;
}
}
}
}
...全文
514 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
黑煤碳 2017-05-18
  • 打赏
  • 举报
回复
求大神给我解答一下内存的变化呀
wgd81685 2017-05-17
  • 打赏
  • 举报
回复
我怎么感觉楼主发现了java的一个bug呢 将Scanner作为局部变量,依然会出现楼主的问题
public class Test3 {

    public static void main(String[] args) {
        Scanner jd = new Scanner(System.in);
        while (true) {
            int on = 0;//判断是否输入成功!
            try {
                int bb = jd.nextInt();
                on = 999;
            } catch (Exception e) {
                System.out.println("error");
            }
            if (on == 999) {//成功就跳出while循环
                System.out.println("定义数字成功!");
            }
        }
    }
}
fish爱宅着 2017-05-14
  • 打赏
  • 举报
回复
继续努力!!
黑煤碳 2017-05-11
  • 打赏
  • 举报
回复
求大神帮帮我呀
xingyuner2 2017-05-11
  • 打赏
  • 举报
回复
这个确实好神奇
javakerwin 2017-05-11
  • 打赏
  • 举报
回复
当某一扫描器抛出 InputMismatchException 时,该扫描器不会传递导致该异常的标记,因此可以通过其他某种方法来获取或跳过它。 这是Java API文档中的原话。意思是说,如果nextInt方法没有成功解析出一个整数,那么你的输入不会被忽略。因为它或许能被其它格式解析。 也就是说你你要想再输入的话得在new一个Scanner对象 也就是二楼写的那样
qq_38687599 2017-05-11
  • 打赏
  • 举报
回复
import java.util.Scanner; public class Foo { static Scanner jd=new Scanner(System.in); public static void main(String[] args){ baz(); } public static void baz(){ boolean b = true; while(b){ int on=0;//判断是否输入成功! try{ System.out.println("------------------"); int bb=jd.nextInt(); on=999; } catch(Exception e){ System.out.println("输入有误请重新输入"); } if(on==999){//成功就跳出while循环 System.out.println("定义数字成功!"); break; } } } } 我在try里面加了一个输出语句,结果抛出异常后不但一直输出catch中的语句,还输出了try中的,也就是说它还是会进try的,只不过 Scanner 对象记住了第一次输入的值,所以你把newScanner 的语句写在while()中就好了,亲测成功!!
zy_arhahaha 2017-05-10
  • 打赏
  • 举报
回复
import java.util.Scanner;
public class Excep{
    public static void main(String[] args){
    	Scanner jd = null;
        while(true){
            int on=0;//判断是否输入成功!
            try{
            	jd = new Scanner(System.in);
                int bb=jd.nextInt();
                on=999;
            }
            catch(Exception e){
                System.out.println("输入有误请重新输入");
            }
            if(on==999){//成功就跳出while循环
                System.out.println("定义数字成功!");
                break;
            }
        }
    }
}
MikeDDT009 2017-05-10
  • 打赏
  • 举报
回复
看着语法没有毛病,只能你走debug看看详细变化了
黑煤碳 2017-05-10
  • 打赏
  • 举报
回复
二楼能不能告诉我,为什么你的就可以实现? 能不能告诉我,我俩之间的代码的区别以及内存的变化?
黑煤碳 2017-05-10
  • 打赏
  • 举报
回复
因为每次输入错误之后就会一直输出catch里面的语句,每次循环都直接跳过try语句,所以我想让它不跳过try里面的东西
Show me ur code 2017-05-10
  • 打赏
  • 举报
回复
你写的是try catch,又不是控制语句,不从上往下执行,那怎么执行?

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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