请教一个处理异常的问题

黑煤碳 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;
}
}
}
}
...全文
486 点赞 收藏 13
写回复
13 条回复
黑煤碳 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("定义数字成功!");
            }
        }
    }
}
回复 点赞
ljguang0401 2017年05月17日
引用 4 楼 qq_26074813 的回复:
二楼能不能告诉我,为什么你的就可以实现? 能不能告诉我,我俩之间的代码的区别以及内存的变化?
jd是静态的,而且一直都是上面定义的那一个,jd的下一个读取,一直都是你上一次输入的内容
回复 点赞
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里面的东西
回复 点赞
java123很简单 2017年05月10日
你写的是try catch,又不是控制语句,不从上往下执行,那怎么执行?
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告