Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/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 从';试试';至';捕捉';在爪哇_Java_Try Catch - Fatal编程技术网

Java 从';试试';至';捕捉';在爪哇

Java 从';试试';至';捕捉';在爪哇,java,try-catch,Java,Try Catch,以下是练习: 如果输入是有效的等级编号,程序应打印“OK”。 否则,程序应打印输入的值,并且“不是 “有效等级。”并再次提示等级编号。该计划应保持 询问分数,直到用户输入有效的分数 举例说明: 输入等级(0-5):9 9不是有效的等级 输入等级(0-5):两级 2不是有效的等级 输入等级(0-5):2 好的 我在while循环中使用带有NumberFormatException的“try-and-catch”。但是,我不能像示例中的第二个那样打印输出。我的输出如下: 输入等级(0-5):9

以下是练习:

如果输入是有效的等级编号,程序应打印“OK”。 否则,程序应打印输入的值,并且“不是 “有效等级。”并再次提示等级编号。该计划应保持 询问分数,直到用户输入有效的分数

举例说明:

输入等级(0-5):9
9不是有效的等级

输入等级(0-5):两级
2不是有效的等级

输入等级(0-5):2
好的

我在while循环中使用带有NumberFormatException的“try-and-catch”。但是,我不能像示例中的第二个那样打印输出。我的输出如下:

输入等级(0-5):9
9不是有效的等级

输入等级(0-5):两级
9不是有效的等级

输入等级(0-5):2
好的

未保存新输入“2”。我怎样才能解决这个问题

下面是我的代码:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

        System.out.print("Enter grade (0-5): ");
        int grade = Integer.parseInt(input.nextLine());


        if (0 <= grade && grade <= 5) {
            System.out.print("OK");
        } else {
            while (grade < 0 || grade > 5) {
                try {
                    System.out.println(grade + " is not a valid grade.");
                    System.out.print("\n");
                    System.out.print("Enter grade (0-5): ");
                    grade = Integer.parseInt(input.nextLine());
                } catch (NumberFormatException nfe) {   
                    System.out.println( " is not a valid grade.");
                    System.out.print("\n");
                    System.out.print("Enter grade (0-5): ");
                    grade = Integer.parseInt(input.nextLine());
                    }
            }                   
            System.out.print("OK");
        }

}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(System.in);
系统输出打印(“输入等级(0-5):”;
int grade=Integer.parseInt(input.nextLine());

如果(0如果
grade
的值为
9
并且输入为
“two”
,那么此行会发生什么情况

grade = Integer.parseInt(input.nextLine());
该行当然会抛出异常。但更重要的是,此行不会将字符串值
“two”
分配给整数变量
grade

将输入存储在字符串中。类似于:

String gradeInput = input.nextLine();
int grade = Integer.parseInt(gradeInput);
如果此操作引发异常,则输入无效。如果未引发异常,但
等级
超出要求范围,则输入无效。但这两种情况都需要单独测试

另外,注意你的第一个输入解析是在TI/catch中的,所以它完全失败了。

Scanner input = new Scanner(System.in);
String gradeInput;
int grade = -1;

while (grade < 0 || grade > 5) {
    try {
        System.out.print("Enter grade (0-5): ");
        gradeInput = input.nextLine();
        grade = Integer.parseInt(gradeInput);
        if (grade < 0 || grade > 5) {
            System.out.println(gradeInput + " is not a valid grade.");
            System.out.print("\n");
        }
    } catch (NumberFormatException nfe) {   
        System.out.println(gradeInput + " is not a valid grade.");
        System.out.print("\n");
    }
}
扫描仪输入=新扫描仪(System.in);
字符串输入;
整合式评分=-1;
而(等级<0 | |等级>5){
试一试{
系统输出打印(“输入等级(0-5):”;
gradeInput=input.nextLine();
grade=Integer.parseInt(gradeInput);
如果(等级<0 | |等级>5){
System.out.println(gradeInput+“不是有效的分数”);
系统输出打印(“\n”);
}
}捕获(NumberFormatException nfe){
System.out.println(gradeInput+“不是有效的分数”);
系统输出打印(“\n”);
}
}

我想有多种方法可以将其组合在一起并进行重构,以尝试减少此处重复的几行。但问题是,您不希望重复接受输入并将其解析为整数的过程,就像您当前的代码那样。因为如果在
catch
外部引发异常完全尝试/catch
则系统将失败。尝试解析字符串中的整数值需要在
try
块中。

如果
grade
的值为
9
且输入为
“两个”
,这一行会发生什么

grade = Integer.parseInt(input.nextLine());
该行当然会抛出异常。但更重要的是,此行不会将字符串值
“two”
分配给整数变量
grade

将输入存储在字符串中。类似于:

String gradeInput = input.nextLine();
int grade = Integer.parseInt(gradeInput);
如果此操作引发异常,则输入无效。如果未引发异常,但
等级
超出要求范围,则输入无效。但这两种情况都需要单独测试

另外,注意你的第一个输入解析是在TI/catch中的,所以它完全失败了。

Scanner input = new Scanner(System.in);
String gradeInput;
int grade = -1;

while (grade < 0 || grade > 5) {
    try {
        System.out.print("Enter grade (0-5): ");
        gradeInput = input.nextLine();
        grade = Integer.parseInt(gradeInput);
        if (grade < 0 || grade > 5) {
            System.out.println(gradeInput + " is not a valid grade.");
            System.out.print("\n");
        }
    } catch (NumberFormatException nfe) {   
        System.out.println(gradeInput + " is not a valid grade.");
        System.out.print("\n");
    }
}
扫描仪输入=新扫描仪(System.in);
字符串输入;
整合式评分=-1;
而(等级<0 | |等级>5){
试一试{
系统输出打印(“输入等级(0-5):”;
gradeInput=input.nextLine();
grade=Integer.parseInt(gradeInput);
如果(等级<0 | |等级>5){
System.out.println(gradeInput+“不是有效的分数”);
系统输出打印(“\n”);
}
}捕获(NumberFormatException nfe){
System.out.println(gradeInput+“不是有效的分数”);
系统输出打印(“\n”);
}
}

我想有多种方法可以将其组合在一起并进行重构,以尝试减少此处重复的几行。但问题是,您不希望重复接受输入并将其解析为整数的过程,就像您当前的代码那样。因为如果在
catch
外部引发异常try/catch
完全重试,则系统将失败。尝试解析字符串中的整数值需要在
try
块中。

如果要打印输入,请将其存储在单独的变量中,然后再尝试将其转换为
int
。作为一系列直通:如果第一个输入抛出,应用程序将崩溃
NumberFormatException
因为这不在
try catch
-block中,所以在try块开始之前调用此“input.nextLine()”,并将结果保存在字符串中。当解析出错时,可以在错误消息中使用此字符串。或者,nfe.getMessage()可能也会有帮助。如果要打印输入,请在尝试将其转换为
int
之前将其存储在单独的变量中。作为一系列步骤:如果第一个输入抛出
NumberFormatException
,则应用程序将崩溃,因为它不在
try catch
-blockCall this'input.nextLine()中'在您的try块开始之前,将结果保存为字符串。当您在分析过程中出现错误时,可以在错误消息中使用此字符串。或者,nfe.getMessage()也可能会有所帮助。这涵盖了几乎所有内容。您可能只需要