日期:2014-05-20 浏览次数:20786 次
import java.io.*; import java.util.InputMismatchException; import java.util.Scanner; public class BasicType { public static void S_equals() { String s1="abc",s2="abc"; System.out.println("s1 equals s2 is "+s1.equals(s2)); System.out.println("s1 equals \"abc\" is "+s1.equals("abc")); System.out.println("\"abc\" equals \"abc\" is "+"abc".equals("abc")); } public static void N_scan() { int sum=0; Scanner scanner=new Scanner(System.in); System.out.print("input 10 interger number like 1,2,3 ..."); String inputStr=scanner.next(); String[] numStr=inputStr.split(","); for(String s:numStr){ int value=Integer.parseInt(s); sum=sum+value; } // for(int i=0;i<10;i++) // { // int m=0; // try{ // m=input.nextInt(); // } // catch(InputMismatchException e) //一直在这个地方循环 求解释啊 // { // i--; // } // sum+=m; // } System.out.println("sum of the 10 Intergers is:"+sum); } public static void main(String[] args) { // TODO Auto-generated method stub S_equals(); N_scan(); } }
------解决方案--------------------
try{
m=input.nextInt();
}
catch(InputMismatchException e) //一直在这个地方循环 求解释啊
{
i--;
}sum+=m;
在sum += m;前少个" ; "
加上就可以了
try{
m=input.nextInt();
}
catch(InputMismatchException e) //一直在这个地方循环 求解释啊
{
i--;
};
sum+=m;
------解决方案--------------------
Scanner是使用分隔符模式将其输入分解为标记的,所以当你输入的标记与期望类型的模式不匹配时,就会发生InputMismatchException异常,在你程序的for循环中,如果发生一次异常,下次还是会发生异常,以为你的input对象还是发生异常的那个对象;至于为什么会一直循环,那是因为当异常发生时你程序i--,这样正好和for循环的i++抵消,成了死循环。我对你程序中i--的理解是:当输入字符与期望类型的模式不匹配时,重新输入,直到输入类型匹配字符。所以下面是程序的修改:
for (int i = 0; i < 10; i++) { int m = 0; try { m = input.nextInt(); } catch (InputMismatchException e) // 一直在这个地方循环 求解释啊 { input = new Scanner(System.in);//当发生异常时,new一个新的Scanner对象 i--; } sum += m; }