关于Java的一个小问题

代码
    Scanner qqq = new Scanner(System.in);

    System.out.println("开始猜丁克,请输入:");

      while (true) {                                //我觉得是这块应该在加个字符转换和判断如果是字符串直接输出重新输入,但是我实现不出来
        int a = qqq.nextInt();
        switch (a) {
            case 1:
                System.out.println("你出的是石头");
                break;
            case 2:
                System****.out.println("你出的是剪刀");
                break;
            case 3:
                System.out.println("你出的是布");
                break;
            default:
                System.out.println("输入格式不正确,请重新输入:");
                continue;
        }

        int i = new Random().nextInt(3);

        switch (i + 1) {
            case 1:
                System.out.println("随机石头");
                break;
            case 2:
                System.out.println("随机剪刀");
                break;
            case 3:
                System.out.println("随机布");
                break;
        }

        int c = a - (i + 1);
        switch (c) {
            case -1:
            case 2:
                System.out.println("恭喜");
                System.out.println("------------");
                return;
            case 0:
                System.out.println("平局");
                System.out.println("------------");
                break;
            case 1:
            case -2:
                System.out.println("失败");
                System.out.println("------------");
                break;
        }
    }
我想要达到的结果

现在我这个代码运行没有任何问题,但是目前只能输入int类型的数值,输入字符串类型的就报错(Exception in thread "main" java.util.InputMismatchException,)因为现在我输入1、2、3是正常运行的,输入4、5、6等等 其他的整数数值显示重新输入是我想要的结果,我想实现的是输入字符串同样达到重新输入的功能,刚学Java不久比较菜希望大佬指教

int a = qqq.nextInt();
这个改string类型的

case 1 改 case "1"

你输入的类型就是int呀,如果你输入其他字符就会报错的,你接受的类型都已经指定是整数了,强行输入其他类型就会报类型异常


思路如下:使用字符串接收,判断类型是否是数字类型,是的话就将字符串强转int类型,若不是则输出错误提示,代码如下

Scanner qqq = new Scanner(System.in);
        System.out.println("开始猜丁克,请输入:");
        while (true) {
            String aa=qqq.next();
            boolean numeric = isNumeric(aa);
            int a;
            if(numeric) 
                a=Integer.parseInt(aa);
            else {
                System.out.println("输入格式不正确,请重新输入:");
                continue;
            }
            switch (a) {
                case 1:
                    System.out.println("你出的是石头");
                    break;
                case 2:
                    System.out.println("你出的是剪刀");
                    break;
                case 3:
                    System.out.println("你出的是布");
                    break;
                default:
                    System.out.println("输入格式不正确,请重新输入:");
                    continue;
            }

            int i = new Random().nextInt(3);

            switch (i + 1) {
                case 1:
                    System.out.println("随机石头");
                    break;
                case 2:
                    System.out.println("随机剪刀");
                    break;
                case 3:
                    System.out.println("随机布");
                    break;
            }

            int c = a - (i + 1);
            switch (c) {
                case -1:
                case 2:
                    System.out.println("恭喜");
                    System.out.println("------------");
                    return;
                case 0:
                    System.out.println("平局");
                    System.out.println("------------");
                    break;
                case 1:
                case -2:
                    System.out.println("失败");
                    System.out.println("------------");
                    break;
            }
        }

int a = qqq.nextInt(); a变量是int类型,不能接受其他的类型,而且你收集输入的是nextInt()说明你输入的也是int.java对于类型控制的还是比较严格的,不像JavaScript没有类型

Scanner.nextInt 方法返回的是 int 类型,可以统一用 String 处理,改成调用 Scanner.next 方法。