哥们,没有任何问题,你建一个普通的Java Project运行就可以了

解决方案 »

  1.   

    清除一下input.           } catch(Exception e) {
                    System.out.println("输入错误,请重新输入:");
                    input.nextLine();//清除一下input内内容。
                    continue;
                }
      

  2.   

    把第 9 行的 while条件改成如下:        
    boolean flag = true;
            while(flag) {然后在 16 行  System.out.println("输入错误,请重新输入:");  的下边加上:
    flag = false;
      

  3.   

    把 17 行的continue 改成break 也行
      

  4.   

    我载下来帮你调试了下
    a = input.nextInt();
    这一行 出错了,第一次运行这函数时候会等待用户输入,第二次到这里的时候直接抛出了异常,所以第一次输入错误后,后面根本没读到数据就到catch里面了,然后又继续循环,到刚刚这一行,就成了死循环。
      

  5.   


    就是说输入不是数字
    那很简单啊,你用个正则表达式判断一下,只允许他输入数字:
    boolean b=Pattern.matches("","");
      

  6.   

    特意查了查,还终于给查到了,感谢某大神。按照大神意思:
    当输入异常后,catch到exception,开始下一次循环,但这时数据缓冲区内你上次输入的异常还在,并没有清除,这时继续解析异常,就又catch到exception,还是错误,于是这个过程就一直重复下去了。
    修改思路:catch到的exception要及时清除,方案有这么2种
    1、在catch()语句 中加上input.next();
    2、将input的定义写在try语句内。
    完美搞定!
      

  7.   

    String str="^[0-9]{1,}$";
    boolean b=Pattern.matches(str,"需要判断的字符串");
      

  8.   

    特意查了查,还终于给查到了,感谢某大神。按照大神意思:
    当输入异常后,catch到exception,开始下一次循环,但这时数据缓冲区内你上次输入的异常还在,并没有清除,这时继续解析异常,就又catch到exception,还是错误,于是这个过程就一直重复下去了。
    修改思路:catch到的exception要及时清除,方案有这么2种
    1、在catch()语句 中加上input.next();
    2、将input的定义写在try语句内。
    完美搞定!敢问是难不成,用了循环的语句如果里面try catch了都要清除吗?
      

  9.   

    看了一下楼主的代码,是想当用户输入错误的数据后返回让用户重新输入。这是我写计算器是输入错误的处理方法,请参考。我用递归写的,sop方法是我另外写的一个打印方法,就是System.out.println();public class CalculatorGetData extends SystemOutPrintClass{
    Scanner sc = null;
    double iFirstNum;
    double iSecondNum;
    char cOperator;
    char cClose; public void getFirstNumber() {
    sop("请输入第一个数字:");
    while (true) {
    sc = new Scanner(System.in);
    try {
    iFirstNum = sc.nextDouble();
    } catch (InputMismatchException e) {
    System.out.println("输入错误,重新输入!");
    getFirstNumber();
    } finally {
    //System.out.println("iFirstNum=" + iFirstNum);
    break;
    }
    }
    }
    public void getOperator(){
    sopln("请输入运算符号(目前支持+、-、×(*)、÷(/)以及%(取余)运算):");
    while(true){
    sc=new Scanner(System.in);
    cOperator = sc.next().charAt(0);
    if(cOperator!='+'&&cOperator!='-'&&cOperator!='*'&&cOperator!='/'&&cOperator!='%'){
    System.out.println("输入错误,重新输入!");
    getOperator();
    break;
    }else{
    //System.out.println("cOperator="+cOperator);
    break;
    }
    }
    }

    public void getSecondNumber(){
    sop("请输入第二个数字:");
    while(true){
    sc=new Scanner(System.in);
    try{
    iSecondNum = sc.nextDouble();
    while (cOperator=='/'||cOperator=='%') {
    if (iSecondNum == 0) {
    System.out.println("输入错误,重新输入!");
    getSecondNumber();
    } else {
    break;
    }
    }
    }catch(InputMismatchException e){
    System.out.println("输入错误,重新输入!");
    getSecondNumber();
    }finally{
    //System.out.println("iSecondNum="+iSecondNum);
    break;
    }
    }
    }
    }
      

  10.   

    楼主只需要把continue;改成main(args);就OK了,我这边已经测试成功。
      

  11.   

    忘了说了,楼主的while(true)循环没用,是冗余代码,因为你在执行完获取b,给它break掉了。而且照我上面说的那样改,不需要while循环就可以搞定。
      

  12.   

    楼主,不要在循环中使用try..catch,性能会变得很差的。上面的需求完全可以用其他的方法来实现。
      

  13.   

    嗯,没错,我把我的代码里面的while循环也去掉了,照样好用
      

  14.   

    Scanner input = new Scanner(System.in);
    放在循环内就好了
      

  15.   

    你要是要这么做的话,先让他随便输入,在用正则表达式判断他是不是数字,这样不但不用try  catch也能达到你的要求吧?
      

  16.   

    由于input中的数据格式转换错误而没有清空,continue后会再次读取这个错误值,导致无限循环。
    可以加个清空input的语句解决:
    } catch (Exception e) {
    System.out.println("输入错误,请重新输入:");
    if (input.hasNext()) {
    input.next();
    }
    continue;
    }
      

  17.   

    public static void main(String[] args) {
            Scanner input = null;
            int a = 0;
            int b = 0;
            while (true) {
                try {
                    input  = new Scanner(System.in);  //new的时候放在这里就可以了   
                    
                    System.out.println("请输入所求素数的两边界(例:求2~100的所有素数,则输入2 100回车):");
                    a = input.nextInt();
                    b = input.nextInt();
                    break;
                } catch (Exception e) {
                    input.reset();
                    System.out.println("输入错误,请重新输入:");
                    continue;
                }
            }
            System.out.println(a + "与" + b + "之间的所有素数:");
            int count = 0;
            if (a > b) {
                int t = a;
                a = b;
                b = t;
            }
            for (int i = a; i <= b; i++) {
                if (MyPrime.isPrime(i)) {
                    System.out.print(i + "\t");
                    count++;
                    if (count == 10) {
                        System.out.println();
                        count = 0;
                    }
                }
            }
            System.out.println();
            System.exit(0);
        }