繁体   English   中英

而真正的尝试捕捉嵌套

[英]while true try catch nested

我是Java新手。 我希望代码在用户输入错误类型的地方重复,而不是从头开始。 在“输入b:”或“输入c:”时,它返回到开头的“输入a:”。 我只想重复一次,用户输入是a,b,c。 提前致谢。

public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
boolean itsANumber = true;
while (itsANumber)
{
    System.out.print("Enter a: ");

    try
    {
    a = Double.parseDouble(sc.nextLine());

    System.out.print("Enter b: ");
    try
    {
        b = Double.parseDouble(sc.nextLine());

        System.out.print("Enter c: ");
        try
        {
        c = Double.parseDouble(sc.nextLine());
        if (a == 0)
        {
            aZero();
        } else

        {
            aNotZero();
        }

        } catch (NumberFormatException nfe) 
        {
        System.out
            .println("That's not a number, please try again!");
        }

    } catch (NumberFormatException nfe) 
    {
        System.out
            .println("That's not a number, please try again!");
    }

    } catch (NumberFormatException nfe) 
    {
    System.out.println("That's not a number, please try again!");
    }
}

}

介绍一种要求输入数字的方法,然后调用它三次。 在方法内部,您将使用try-catch进行while循环。

public static void main(String... args) {
   Scanner sc = new Scanner(System.in);
   double
     a = askForDouble(sc, "a"),
     b = askForDouble(sc, "b"),
     c = askForDouble(sc, "c");
}
static double askForDouble(Scanner sc, String varName) {
   for (;/*ever*/;) {
     System.out.format("Enter %s: ", varName);
     System.out.flush();
     try {
       return Double.parseDouble(sc.nextLine());
     } catch (NumberFormatExcetpion() {
       System.out.println("That's not a number, please try again!");
     }
   }
}

您可以通过以下方法进行简单的空检查尝试,这是原始代码,可能需要更改

Double a = null;
Double b = null;
Double c = null;
Scanner sc = new Scanner(System.in);
while(true){

    if(a != null){              
        System.out.println("Enter a :");
        a = readFromInStream(sc, "a");
            if(a == null) continue;
    }
    if(b != null){              
        System.out.println("Enter b :");
        b = readFromInStream(sc, "b");
            if(b == null) continue;
    }
    if(c != null){              
        System.out.println("Enter c :");
        c = readFromInStream(sc, "c");
            if(c == null) continue;
    }
    if(a != null && b != null && c != null){
        break;
    }
}

private Double readFromInStream(Scanner sc, String varStr){
    Double temp = null;
    try
    {
        temp = Double.parseDouble(sc.nextLine());
    }catch(NumberFormatException e){
        System.out.println("Invalid value for :"+varStr);
    }
    return temp;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM