下面是练习:
如果输入的是有效的等级号,程序应该打印“确定”。否则,程序应该打印输入的值和“不是有效的等级”。并再次提示等级号。程序应该继续询问等级号,直到用户输入有效的等级号。
示例输出:
输入年级(0-5): 9
9 不是有效成绩
输入成绩 (0-5): 两
个两个不是有效成绩
输入等级 (0-5): 2
OK
我在time循环中使用NumberFormatException的“try and catch”。但是,我不能像示例中的第二个那样打印输出。我的输出如下所示:
进入等级(0-5):9
9不是有效等级
进入等级(0-5):两个
9不是有效等级
进入等级(0-5):2
OK
新的输入'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");
}
}
如果< code>grade的值是< code>9,输入是< code >“two”,这一行会发生什么?:
grade = Integer.parseInt(input.nextLine());
该行当然会抛出异常。但更重要的是,这一行不会将字符串值“二”
分配给整数变量等级
。
请将输入存储在字符串中。类似于:
String gradeInput = input.nextLine();
int grade = Integer.parseInt(gradeInput);
如果此操作抛出异常,则输入无效。如果它没有抛出异常,但等级
超出了要求范围,则输入无效。但这两种情况都需要单独测试。
此外,请注意,您的第一个输入解析在try/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");
}
}
我想有多种方法可以把它放在一起并重构,以尝试减少这里重复的几行。但关键是你不想重复接受输入并将其解析为整数的行,就像你当前的代码一样。因为如果在 catch
中或完全在 try/catch
之外引发异常,则系统将失败。从字符串中解析整数值的尝试需要在 try
块中。
我实现了一个try-catch块。 我试图用一种特定的方式实现捕捉块,但是它不太好用。如果输入不是整数,它应该重复并返回到try块。它只工作一次,但更多。 你能给我一些帮助吗?非常感谢。
问题内容: 我最初从大学开始编程,然后学习了vb.net。现在,我决定转向Java并进行一些查询。在vb中,try catch语句的布局如下 但是在Java网站(https://docs.oracle.com/javase/tutorial/essential/exceptions/putItTogether.html)中,我发现在Java中,您使用了两个陷阱,如下所示: 我希望有人能够解释为什么
问题内容: 我正在审查一些新代码。该程序仅具有try和finally块。由于不包含catch块,如果try块遇到异常或任何可抛出的异常,它将如何工作?它是否直接进入了finally块? 问题答案: 如果try块中的任何代码都可以引发已检查的异常,则它必须出现在方法签名的throws子句中。如果引发了未经检查的异常,则该异常会冒泡退出方法。 无论是否引发异常,都始终执行finally块。
问题内容: 大家。我有一个关于java中返回值的菜鸟问题。这是我的代码。 Eclipse报告“此方法必须返回long类型的结果”错误。但是我确实在try块中返回了提示。eclipse建议在try / catch块之后添加一个返回值,这会破坏逻辑。你能告诉我这里有什么问题吗?谢谢。 问题答案: 当一个被抛出的返回值是不确定的。引发异常时,控制权立即传递给异常处理程序。在这种情况下,您记录错误。然后控
在实际开发中,根据 try catch 语句的执行过程,try 语句块和 catch 语句块有可能不被完全执行,而有些处理代码则要求必须执行。例如,程序在 try 块里打开了一些物理资源(如数据库连接、网络连接和磁盘文件等),这些物理资源都必须显式回收。 Java的垃圾回收机制不会回收任何物理资源,垃圾回收机制只回收堆内存中对象所占用的内存。 所以为了确保一定能回收 try 块中打开的物理资源,异
我刚刚开始用java编写一个21点游戏。我试图让程序要求用户再次输入,如果他们输入的现金不是一个有效的整数。我看到许多带有catch的try语句示例,但没有一个是有效的。程序给出的错误InputMismatchException无法解析为类型。我遵循的一个线程就是这个,我有完全相同的代码,只是变量名不同。给你。Java输入不匹配异常 这是我的密码: 任何关于为什么我几乎精确的代码不起作用的帮助都将