java中如何抛出异常后继续运行
题目:输入若干个整数,并求和,直到结束标志999为止。在输入过程中,自动忽略掉输入的非整数。代码:importjava.util.InputMismatchExcepti...
题目:输入若干个整数,并求和,直到结束标志999为止。在输入过程中,自动忽略掉输入的非整数。
代码:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Sum {
static int i = 0;
static int s = 0;
static void sum() throws InputMismatchException {
Scanner sc = new Scanner(System.in);
for(;;){
if(sc.hasNextInt()){//如果输入流取到整数,则累加
int i=sc.nextInt();
if(i==999)//999为循环结束标志
break;
else
s+=i;
}
else//输入流取得非整数,则抛出异常
throw new InputMismatchException();// 如果不为整数,则抛出不匹配异常
}
sc.close();
System.out.println(s);
}
public static void main(String[] args) {
try {
sum();
} catch (InputMismatchException e) {
//i = 0;// 不匹配异常的处理,累加时忽略非整数
//System.out.println("输入了非整数");
} catch (Exception e) {
System.out.println("程序出现了其它异常");
}
}
} 展开
代码:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Sum {
static int i = 0;
static int s = 0;
static void sum() throws InputMismatchException {
Scanner sc = new Scanner(System.in);
for(;;){
if(sc.hasNextInt()){//如果输入流取到整数,则累加
int i=sc.nextInt();
if(i==999)//999为循环结束标志
break;
else
s+=i;
}
else//输入流取得非整数,则抛出异常
throw new InputMismatchException();// 如果不为整数,则抛出不匹配异常
}
sc.close();
System.out.println(s);
}
public static void main(String[] args) {
try {
sum();
} catch (InputMismatchException e) {
//i = 0;// 不匹配异常的处理,累加时忽略非整数
//System.out.println("输入了非整数");
} catch (Exception e) {
System.out.println("程序出现了其它异常");
}
}
} 展开
8个回答
展开全部
出现InputMismatch后一直循环:
当某一扫描器抛出 InputMismatchException 时,该扫描器不会传递导致该异常的标记,因此可以通过其他某种方法来获取或跳过它。
这是java API文档中的原话。意思是说,如果nextInt方法没有成功解析出一个整数,那么你的输入不会被忽略。因为它或许能被其它格式解析。
那么你的程序中输入了a后,出现异常,number被赋值100,开始下一次循环,但这时数据缓冲区内你上次输入的a还在,并没有清除,这时继续解析a,还是错误,于是这个过程就一直重复下去了。
现在你要改的是,出现错误把这次的输入清除,只要在catch中,加一句:input.next()就搞定了!
也可以将Scanner写在try里面
当某一扫描器抛出 InputMismatchException 时,该扫描器不会传递导致该异常的标记,因此可以通过其他某种方法来获取或跳过它。
这是java API文档中的原话。意思是说,如果nextInt方法没有成功解析出一个整数,那么你的输入不会被忽略。因为它或许能被其它格式解析。
那么你的程序中输入了a后,出现异常,number被赋值100,开始下一次循环,但这时数据缓冲区内你上次输入的a还在,并没有清除,这时继续解析a,还是错误,于是这个过程就一直重复下去了。
现在你要改的是,出现错误把这次的输入清除,只要在catch中,加一句:input.next()就搞定了!
也可以将Scanner写在try里面
展开全部
结合前面的回答,我写了一下。sc.next()这句很重要,要不然会一直读那个错误的输入。
//求输入的所有整数的和,当输入999时终止输入,并输出求和
Scanner sc = new Scanner(System.in);
//记录每一个整数的值
int item = 0;
//记录最后的求和
int sum = 0;
while(true) {
try {
item = sc.nextInt();
if(item == 999) {
break;
}
} catch(InputMismatchException e) {
System.out.println("注意输入整数,请重新输入");
//下面这句很重要。如果没有这句,缓冲区里一直会读错误的那个值,并且一直输出 上面所写的"注意输入整数,请重新输入"
sc.next();
continue;
}
sum += item;
}
System.out.println("sum:"+sum);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
抛出异常后程序就中断了,不能继续执行,可以在try{}catch(Exception e){}finally{
执行业务逻辑}。只有这种在finally中谢代码 才可以把异常屏蔽掉
执行业务逻辑}。只有这种在finally中谢代码 才可以把异常屏蔽掉
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java的异常处理机制,try···catch···finaly,继续运行的写在finaly里就好了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将想要在异常抛出之后还要运行的代码部分放到finally{}里面
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询