Scanner input=new Scanner(System.in);
    
     for(int i=1;i<=10;i++){
     System.out.println("请输入第"+i+"个数据");
     try{input.nextInt();}catch (InputMismatchException e) {
     }
     }
下面是控制台结果
请输入第1个数据
1
请输入第2个数据
2
请输入第3个数据
a
请输入第4个数据
请输入第5个数据
请输入第6个数据
请输入第7个数据
请输入第8个数据
请输入第9个数据
请输入第10个数据我想让他一个输入错误后可以继续重复输入数据,而不是结束,也不要再从头开始.
但是Java却不会执行try里的语句了.
我想到的办法是重载一个方法,然后递归调用.代码如下
int[] inPut(){
int[] temp=new int [10];
Scanner input=new Scanner(System.in);
    
     for(int i=1;i<=10;i++){
     try{System.out.print("请输入第"+i+"个数据:");
     temp[i-1]=input.nextInt();
     }catch (InputMismatchException e) {
     temp=JiSuan.inPut(temp,i);
     break;
     }
     }
     return temp;
    
}

static int[] inPut(int [] temp,int i){
int[] yctemp=new int[10];
Scanner input=new Scanner(System.in);
    
     for(;i<=10;i++){
     try{System.out.println("请输入第"+i+"个数据");
     yctemp[i-1]=input.nextInt();
     }catch (InputMismatchException e) {
     yctemp=JiSuan.inPut(temp,i);
     break;
     }
     }
     return yctemp;
    
}
但是这样感觉写感觉如果递归次数过多,就是一直输错,可能会栈溢出,也不如用循环写漂亮.
java有没有方法cath完之后可以执行try的方法,如果可以的话,代码就可以写成
Scanner input=new Scanner(System.in);
    
     for(int i=1;i<=10;i++){
     System.out.println("请输入第"+i+"个数据");
     try{input.nextInt();}catch (InputMismatchException e) {
     i--;
     continue;
     }
     }
可以简单很多.
那么Java到底有没有办法执行try中的语句,或者有什么更好的更简单的实现方法.

解决方案 »

  1.   

    粗略写了一个参考一下public class Demo { private Scanner myScanner = new Scanner(System.in);
    int flag=1;//记录发生错误的小标
    int count=0;//成功的次数
    int falut=0;//错误的次数
    public  void test() {
    for (int i =flag; i <=10; i++) {
    if(count+falut==10){
    break;
    }
    System.out.println("输入第"+i+"个数据");
    try {
    this.myScanner.nextInt();
    count++;
    } catch (Exception e) {
    System.out.println("输入错误,请输入正确的数值!!!");
    falut++;
    this.myScanner.next();
    flag=i+1;
    this.test();
    }
    }

    }
    public static void main(String[] args) {
    Demo demo=new Demo();
    demo.test();
    }
    }
      

  2.   

    import java.util.InputMismatchException;
    import java.util.Scanner;public class ScannerTest {
    public static void main(String[] args) {
    Scanner input=new Scanner(System.in);
    for(int i=1;i<=10;i++){
    System.out.println("请输入第"+i+"个数");
    try{
    input.nextInt();
    }catch(InputMismatchException e){
    i--;
    input.next();//把错误的数据读取
    }
    }
    }
    }
    你这样试一下
    试运行结果
    请输入第1个数
    s
    请输入第1个数
    sd
    请输入第1个数
    d
    请输入第1个数
    4
    请输入第2个数
    f
    请输入第2个数
    g
    请输入第2个数
    4
    请输入第3个数
      

  3.   


    int[] inPut(){
         int[] temp=new int [10];
         Scanner input=new Scanner(System.in);
         int x = 0;
         boolean flag = false;
         for(int i=1;i<=10;i++){
                try{
                 System.out.println("请输入第"+i+"个数据");
                 input = new Scanner(System.in);
                    x=input.nextInt();
                    flag = true;
                }catch(Exception e){
                 flag = false;
                    System.out.println("输入有误请重新输入");
                    i--;
                }finally{
                 if(flag){//输入有效则加入数组
                     temp[i-1] = x;
                    }
                }
            }
         System.out.println("--------");
         for(int i : temp){
         System.out.println(i);
         }
         return temp;
        }应该能满足你的需求
      

  4.   

    public class Test {
        public int[] inPut(){
            int [] array = new int [10];
            for (int i=0;i<array.length;i++){
                try {
                    System.out.println("输入数据"+(i+1));
                    array[i] = this.getIn();
                }catch (Exception e){
                    System.out.println("数据错误!");
                    i--;
                }
            }
            return array;
        }
        public static void main(String[] args) {
            Test demo=new Test();
            demo.inPut();
        }    public int getIn() throws Exception{
            Scanner input=new Scanner(System.in);
            int x = 0;
            x = input.nextInt();
            return  x;
        }
    }
    感觉可以不需要标记直接使用try catch