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();
}}

解决方案 »

  1.   

    你想要用户一次性输出10个数么?那你现在的逻辑肯定是错误的啊先给你一个一次输入10个数的吧,10个数输入的时候按照逗号分隔
    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();
        }}
      

  2.   

    nextLine()也可以,每次输一个整数敲一个enter
      

  3.   

    try{
     m=input.nextInt();
     }
     catch(InputMismatchException e) //一直在这个地方循环 求解释啊
    {
    i--;
     }sum+=m;
    在sum += m;前少个" ; "
    加上就可以了
    try{
     m=input.nextInt();
     }
     catch(InputMismatchException e) //一直在这个地方循环 求解释啊
    {
    i--;
     };
    sum+=m;
      

  4.   

    我就用你的代码,怎么没有你说的错误呢:在 dos 下编译,运行是对的
      

  5.   

    追问 我用 
    Scanner input=new Scanner(System.in);
    hasNextInt()判断是否为整数
    如果不是怎么用input.nextInt()读取下一个数
      

  6.   


    好像从第一次执行下面这段以后,每次循环都会执行下面那段,所以一直循环跳不出来catch(InputMismatchException e) //一直在这个地方循环 求解释啊
    {
    i--;

      

  7.   

    scanner很鸡肋 题目要求 没有办法啊 纠结我几个小时了 继续努力中
      

  8.   

    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;
    }
      

  9.   

    正解 刚好我也找到答案了
    import java.io.*;
    import java.util.InputMismatchException;
    import java.util.NoSuchElementException;
    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;
    for(int i=0;i<10;i++)
    {
    int m=0;
    boolean flag=true;
    System.out.print("input an interger:");
    while(flag)
    {
    Scanner input=new Scanner(System.in);
    try
    {
    m=input.nextInt();
    flag=false;
    }
    catch(java.util.InputMismatchException e)
    {
    System.out.print("wrong!not an interger!enter again:");
    flag=true;
    }
    }
    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.   

    try{
    m=input.nextInt();
    }
    catch(InputMismatchException e) //一直在这个地方循环 求解释啊
    {
    i--;
    }
    因为每次你都做了i--操作,如果有不符合的数(此处即不是int类型),nextInt方法会一直停留在这个不符合的数,同时抛出异常,此时i一直做i--的操作,在for循环中刚i++,现在又i--,相当于i没有变,当然会一直进行循环
    楼主应该是逻辑错误,把i--删了或者改了就ok了
      

  11.   

    当某一扫描器抛出 InputMismatchException 时,该扫描器不会传递导致该异常的标记,因此可以通过其他某种方法来获取或跳过它。
    这是java API文档中的原话。意思是说,如果nextInt方法没有成功解析出一个整数,那么你的输入不会被忽略。因为它或许能被其它格式解析。
    那么你的程序中输入了a后,出现异常,number被赋值100,开始下一次循环,但这时数据缓冲区内你上次输入的a还在,并没有清除,这时继续解析a,还是错误,于是这个过程就一直重复下去了。
    现在你要改的是,出现错误把这次的输入清除,只要在catch中,加一句:input.next()就搞定了!
    也可以将Scanner写在try里面