Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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/9/csharp-4.0/2.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:在Do-While循环中尝试Catch语句_Java_Exception Handling_Try Catch_Do While_Inputmismatchexception - Fatal编程技术网

Java:在Do-While循环中尝试Catch语句

Java:在Do-While循环中尝试Catch语句,java,exception-handling,try-catch,do-while,inputmismatchexception,Java,Exception Handling,Try Catch,Do While,Inputmismatchexception,我试图执行一段代码来扫描用户输入值。此操作包含在我编写的一个名为getTriangleDim()的自定义方法中;该方法读取用户的int值,确保它在某个范围内,然后返回输入的int值。这个方法非常有效,我对它没有任何问题 当我为getTriangleDim()方法输入一个非int值时,问题就出现了。它给我一个输入不匹配异常错误。我已将try-catch语句写入do-while循环中,试图解决此问题。但这是我第一次使用try-catch语句,显然我遗漏了一些东西 以下是嵌套在do while循环中的

我试图执行一段代码来扫描用户输入值。此操作包含在我编写的一个名为getTriangleDim()的自定义方法中;该方法读取用户的int值,确保它在某个范围内,然后返回输入的int值。这个方法非常有效,我对它没有任何问题

当我为getTriangleDim()方法输入一个非int值时,问题就出现了。它给我一个输入不匹配异常错误。我已将try-catch语句写入do-while循环中,试图解决此问题。但这是我第一次使用try-catch语句,显然我遗漏了一些东西

以下是嵌套在do while循环中的try catch语句的代码:

//loop to scan for triangle dimension
        boolean bError = true;
        int triangle;

        do{
            try {
                triangle = getTriangleDim();
                bError=false;
                }
            catch (Exception e){
                System.out.println("You did not enter an integer, please enter an integer value");
                triangle = getTriangleDim();

                }
        }while (bError);
如果我通过输入一个char值代替int来测试它,它实际上会捕获一次错误,然后打印我的“younot…”语句。但如果我重新输入另一个非整数,我会再次得到一个运行时错误,它说……。你猜对了。。。。。。。。输入不匹配异常错误

我的方法的代码如下所示:

//method for scanning triangle dimensions from keyboard
    public static int getTriangleDim(){
        int triangle = 0;
        Scanner keyboard = new Scanner(System.in);
        do{
        System.out.print("Enter a non-zero integer length (+/-1 - +/-16): ");
        triangle = keyboard.nextInt();
        if((!(triangle <= 16 && triangle >= 1))&&(!(triangle >= -16 && triangle <= -1)))
            System.out.println("Inpute value outside of range");
        }while((!(triangle <= 16 && triangle >= 1))&&(!(triangle >= -16 && triangle <= -1)));
        return triangle;
    }
//从键盘扫描三角形尺寸的方法
公共静态int getTriangleDim(){
整数三角形=0;
扫描仪键盘=新扫描仪(System.in);
做{
System.out.print(“输入非零整数长度(+/-1-+/-16):”;
三角形=键盘.nextInt();

如果((!(triangle=1))&(!(triangle>=-16&&triangle=-16&&triangle=-16&&triangle则无需在
catch
块中请求输入。您已经处于循环中,因此您可以捕获异常,告诉用户给您有效的输入,然后您无需执行任何其他操作—您将循环回到开始

do{
    try {
        triangle = getTriangleDim();
        bError=false;
    } catch (Exception e){
        System.out.println("You did not enter an integer, please enter an integer value");
        // Don't do anything else in here: we will loop back to the beginning again and get new input!
    }
}while (bError);

作为旁注(正如您所注意到的),如果您尝试在
try
块之外使用
triangle
,您的代码当前将无法编译,因为
三角形可能尚未初始化
。这是因为编译器:也就是说,编译器看不到
三角形
将始终在该循环中初始化。因此,您的变量声明还应该将
三角形
设置为某个默认值。
0
int
的正常默认值,但请在pro中使用任何有意义的东西gram(根据您的
gettriangeldim
code,看起来
0
很好)


通过这种方式,您可以“承诺”编译器,当您离开循环时,
triangle
将有一个值,并且您可以在其他地方使用它。

谢谢,我现在觉得很傻。我更新了代码以删除catch块中的扫描仪输入。但是现在我得到了一个不同的错误,编译器给了我以下错误“不可编译的源代码-变量三角形可能尚未初始化"。此外,在我的Do while循环和嵌套的try-catch语句之后,对traingle变量的每个引用都用红色下划线。我不明白,好像我的程序没有识别出它已经用一个值初始化了?@Adam编译器没有撒谎!你可以看到它应该在退出循环时初始化,但是compiler。就编译器而言,您可能不需要初始化
三角形
,就可以离开循环。请参阅与您类似的示例,但要点是,在执行实际赋值的循环之前,您必须将
三角形
初始化为某个默认值(
0
-1
是常见的)(例如,
int triangle=0;
)。Thnaks!我感谢您的帮助。您可以定义一个新的异常
类NotIntegerException Extendes Exception{..}
,并在外部捕获它,以区别于其他类型的异常
int triangle = 0;
do { // etc.