Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java try catch for do while循环不循环_Java_Do While - Fatal编程技术网

Java try catch for do while循环不循环

Java try catch for do while循环不循环,java,do-while,Java,Do While,我在尝试执行try-catch for do while循环时遇到了一些问题: try{ do { System.out.println("Enter your option: "); choice = sc.nextInt(); switch (choice) { case 1: break; case 2: break;

我在尝试执行try-catch for do while循环时遇到了一些问题:

try{
    do {
        System.out.println("Enter your option: ");
        choice = sc.nextInt();
        switch (choice) {
            case 1:
                break;
            case 2:
                break;
            case 3:
                break;
            case 4:
                break;
            case 5:
                break;

        }
    } while (choice != 6);
    }catch(InputMismatchException e){
        System.out.println("Please enter option between 1-6.");
    }
我试图为do while循环做的是,当用户输入除6之外的任何内容时,它将继续提示用户输入。对于每一种情况,都将使用特定的方法

然后,我尝试对InputMismatchException执行try-catch,因为我的扫描仪从用户输入中获取整数。然而,在我输入字母表而不是整数后,程序就自动终止了。我试着做像当用户输入字母表,它会不断提示用户正确的输入

有什么想法吗?提前谢谢

我在想,我是否应该再做一次,同时包装整个试捕?

像这样做:

try {
   choice = sc.nextInt();
} catch(InputMismatchException e){
        System.out.println("Please enter option between 1-6.");
        sc.next();
        continue;
    }

如果用户输入无效的输入,它将转到catch块并继续循环。拆下外部试扣块。处理字符和无效数字不是必需的,您可以这样做:

do {
    System.out.println("Enter your option: ");
    try{
      choice = sc.nextInt();
    catch(InputMismatchException e){
      choice = 0;
      sc.next();
    }
    switch (choice) {
        case 1:
            break;
        case 2:
            break;
        case 3:
            break;
        case 4:
            break;
        case 5:
            break;
        default:
            System.out.println("Please enter option between 1-6.");
            break;
       }
} while (choice != 6);

嗯,这实际上给了我无限的循环,当用户输入字母表时,选项菜单本身只是保持循环,而不接受用户输入。我删除了外部的try-catch并按照您的建议进行了操作,但不幸的是没有运气。您的
break
语句应用于
开关(而不是循环),当您没有得到
int
时,您需要调用
Scanner.next()
(或者令牌将导致无限循环).对不起,你介意给我看一些代码示例吗?我很困惑,我明白了,我明白了。这就解决了问题。非常感谢你!如果抛出一个异常,那么它将把您带到while循环之外的catch,并因此终止。只需将您的try-catch更多地放在您希望捕获异常的地方,即在for循环中。是的,我按照答案之一的建议将其移入。但问题是,当用户输入字母表时,程序会给我一个无限循环“输入您的选项:”而不接受用户输入只要您重新定义要在输入中检查的变量(try-catch中的变量),那么它就不会是一个“无限”循环。用户输入有效输入,然后继续操作,即可退出。另一种方法是根本不使用nextInt,直接从用户那里获取字符串输入并自己验证,而不是使用try-catch机制。