gpt4 book ai didi

JAVA:异常处理有问题吗?程序只捕获一次异常

转载 作者:行者123 更新时间:2023-12-02 13:12:57 26 4
gpt4 key购买 nike

我正在尝试创建一个程序,其中用户输入从 00000 到 99999 的五位邮政编码,如果用户输入超出该范围的数字或非数字值,它应该抛出异常并给出用户有机会继续尝试,直到输入 5 个数值。

我的程序似乎只捕获它的第一个实例,然后它只是打印出用户输入的第二个内容,即使它不符合要求。

我刚刚被难住了,我不确定如何在我的代码中使用 while 循环,尽管我相信这可能是我需要的?

我是这方面的初学者,任何帮助将不胜感激!

import java.util.InputMismatchException;
import java.util.Scanner;
public class xzip_code {

public static void main(String[] args)
{


try
{
Bounds(Program());
}
catch(IllegalArgumentException ex)
{
System.out.println("Enter 5 Digits");
Program();
}
catch(InputMismatchException ex)
{
System.out.println("Enter Numbers");
Program();
}


}

public static void Bounds(String answer)
{
int length = answer.length();

if(length<5 || length>5)
{
throw new IllegalArgumentException("Enter 5 Digits");

}
char a = answer.charAt(0);
char b = answer.charAt(1);
char c = answer.charAt(2);
char d = answer.charAt(3);
char e = answer.charAt(4);

int f = a;
int g = b;
int h = c;
int i = d;
int j = e;

if(f>58 || g>58 || h>58|| i>58||j>58)
{
throw new InputMismatchException("Enter Numbers");
}


}

public static String Program()
{
Scanner userInput = new Scanner(System.in);
String x = userInput.next();
System.out.println(x);
return x;

}

}

最佳答案

您的方法 Bounds() 执行验证工作。

目前,在您的 catch block 中您只是调用 Program()。相反,您需要调用 Bounds() 并将参数 Program() 传递给它。

下面的代码将循环,直到没有异常(成功执行try block )。

boolean flag = true;
while(flag) {
try {
Bounds(Program());
flag = false;
} catch(IllegalArgumentException ex) {
System.out.println("Enter 5 Digits");
}
catch(InputMismatchException ex) {
System.out.println("Enter Numbers");
}
}
<小时/>

您还需要检查用户是否仅输入了数字。
0 -> 489 -> 57 的 ASCII 值。因此,您对 > 58 的检查没有意义。它应该检查在范围内。

您可以简单地使用 if (Character.isLetter(answer.charAt(index))) 来检查单个数字(这很乏味)。

相反,只需将字符串转换为整数并检查它是否成功转换,否则抛出错误。

try {
Integer.parseInt(answer);
} catch (NumberFormatException e) {
throw new InputMismatchException("Enter Numbers");
}

关于JAVA:异常处理有问题吗?程序只捕获一次异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43883663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com