import java.io.*;
import java.util.InputMismatchException;
import java.util.Scanner;
public class basicType {
/**
* @param args
*/
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 input=new Scanner(System.in);
System.out.print("input 10 interger number:");
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();
}
}
------解决方案--------------------
你想要用户一次性输出10个数么?那你现在的逻辑肯定是错误的啊
先给你一个一次输入10个数的吧,10个数输入的时候按照逗号分隔
- Java code
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--的理解是:当输入字符与期望类型的模式不匹配时,重新输入,直到输入类型匹配字符。所以下面是程序的修改:
- Java code
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; }