关于catch里面套一个try catch的问题

Scanner语句没有执行直接报错的问题

我怀疑是这个trycatch语句的问题代码如下:

System.out.print("|验证码["+arr[index]+"]:");
        try {
        code=s.nextInt();
        } catch(InputMismatchException ie) {
            index++;
            System.out.println("|   请输入数字!");
            System.out.print("|验证码["+arr[index]+"]:");
            code=s.nextInt();

        }

运行结果:

|验证码[1234]:ljklj
|   请输入数字!
Exception in thread "main" |验证码[4562]:java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at Login.BookUtils.createUser(BookUtils.java:86)
    at Login.BookUtils.main(BookUtils.java:23)

这个在我第一次给code赋值的时候为了防止输入时报出这个数据类型不一致异常所以我就给他处理了,但是当我想在catch语句中直接进行第二次录入的时候这个catch语句中的code=s.nextInt();没有运行而且还报出了和上面我要处理的一样的异常,没有运行code=s.nextInt();我应该就没有录入值,没有经过判断直接就报错了,这是为什么,求大佬帮助

code=s.nextInt();
这里还有异常,估计是缓冲区还有换行,导致int没有读