JAVA循环体异常处理问题!!急!!!

目的:输入若干个整数,求其和,直到结束标志999为止。在输入过程中,其输入非正整数,则忽略。其实也就是跳过发生InputMismatchException异常的错误输入。
代码如下:
import java.util.*;
import java.io.*;
public class main {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int k,SUM;
boolean ok=false;
Scanner scan=new Scanner(System.in);
k=0;
SUM=0;
while (!ok)
{
try
{
System.out.println("请输入一个整数进行累加操作:(累加结束标志为输入999)");
SUM += k;
k = 0;
k = scan.nextInt();
if(k==999){ok=true;}
} catch (InputMismatchException e)
{
System.out.println("输入数据不合法,请重新输入!");
}
}
System.out.println("累加和为" + SUM);
}
}

实际问题是发生一次输入数据不匹配,异常被catch捕捉之后,while循环继续,但不再执行try语句内部的内容,导致catch死循环。。。
这个问题怎么解决?
是写法有问题还是应该换一种异常处理方式?
希望准确解答3Q3Q3Q~

第1个回答  2012-12-01
这个异常就是这样,会不停地循环出异常的。
不要这样处理用scan.next()接收字符串,然后转成整数,不是数字的话抛出NumberFormatException异常。

import java.util.*;
import java.io.*;
public class main {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int k,SUM;
boolean ok=false;
Scanner scan=new Scanner(System.in);
k=0;
SUM=0;
String tmp=null;

while (!ok)
{
try
{
System.out.println("请输入一个整数进行累加操作:(累加结束标志为输入999)");
SUM += k;
k = 0;
tmp = scan.next();
k=Integer.parseInt(tmp);

if(k==999){ok=true;}
} catch (NumberFormatException e)
{
System.out.println("输入数据不合法,请重新输入!");
}
}
System.out.println("累加和为" + SUM);
}
}本回答被提问者采纳

Java异常处理机制问题
异常的匹配方式是向上匹配原则,如果catch中没有精确匹配的异常类型,即向该异常的父级异常匹配,进而处理结果。第一题中,出现了很多return混淆视听。一般来说,finally是在return之前执行的;第二题中匹配异常时就出现了个ArithmeticException(运算异常)去匹配NullPointerException(空指针),很显然不会匹配...

java异常处理?
1、当有异常出现时,如果程序员没有将对其进行异常处理,那么异常将会出现在控制台上,如下面的控制台信息:Exception in thread "main" java.lang.NullPointerException at Main.f(Main.java:11)at Main.main(Main.java:7)第一行给出了是异常的原因,NullPointerException,这相当于c和c++里的空指...

Java异常处理
1、非运行时异常(编译异常):需要在编译时处理的异常,即在方法声明中必须显式声明或捕获这些异常。常见的检查异常包括IOException、SQLException等。2、运行时异常(RuntimeException):无需在编译时处理的异常,即编译器不强制要求捕获或声明这些异常。常见的运行时异常包括NullPointerException、IllegalArgume...

JAVA中异常处理的概念问题。。。
对于其它不是“RuntimeException”的异常(“非运行时异常”),方法中如果有可能出现,就必须catch住或者用throws显示抛出,否则Java源代码是无法通过编译的。=== 一般在下面这种情况时使用throws:某个方法中调用了一些会抛出异常方法,而这个方法从业务或逻辑上来说又不太应该处理这种异常,所以由它来cat...

java中的异常处理...
Java中的异常处理机制是由try \/catch\/finally语句控制的,一个try语句后面可以跟多个catch语句对try区块中抛出的异常进行处理。finally语句多catch中没有进行处理的异常进行扫尾工作。具体的语句的写法格式如下 try{ expr } catch(exception e){ expr } finally{ expr } expr代表处理语句。在try语句中...

java异常处理小知识!!!
1. Java中的异常处理机制的简单和应用。当Java程序违反了Java的语义规则时,Java虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是Java类库内置的语义。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是Java允许程序员扩展...

Java异常问题处理!!!
回答:import java.io.IOException;import java.util.Scanner;public class Student {private int age;private String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void ...

Java中出现异常如何进行处理,其中代码执行的步骤是什么
如果想在当前类处理,则try catch这个异常 若是throw的话,则发现异常直接抛回给上层,执行顺序是:抛出异常、上层处理 若try catch的话 try{ new Exception();}catch(Exception ex){ 这里处理异常 } 如果有finally块的话 执行顺序为: try、catch、finally finally无论是否有异常都将执行。

这几种Java异常处理方法,你会吗?
对于运行时异常,通常使用`throw`关键字抛出异常。自定义异常类时,需要遵循以下原则:1. 所有异常类都应是`Throwable`的子类。2. 如果自定义检查性异常类,则应继承`Exception`类。3. 如果自定义运行时异常类,则应继承`RuntimeException`类。总结起来,Java异常处理通过合理的错误管理,能够显著提升软件...

Java异常处理的分类有哪些
1. 非检测异常(Unchecked Exceptions):这类异常不需要遵循处理或声明规则。编译器不会检查是否已解决这类异常。例如,当尝试访问一个长度为3的数组的第4个元素时,会引发数组越界异常。这种异常是由JVM在运行时检测到的,但不会强制程序员处理。它主要分为两个类:RuntimeException和Error。2. Error...

相似回答