初学者:catch中抛出异常;实现一个循环JAVA
开发一个类似于创建收据的程序。它需要扫描仪输入:名称和价格。尝试使用try-catch来处理无法将double输入到价格扫描程序中的情况。设法让它工作,但只有当异常被抛出一次;如果我在catch块中再次给出错误的输入,它将失败。我该怎么做才能让程序处理catch中的异常?我也只是一个孩子,用我能得到的任何免费资源学习,所以这里的错误可能只是根本性的问题/糟糕的编码实践,我也希望指出这些问题 谢谢大家! 代码如下:初学者:catch中抛出异常;实现一个循环JAVA,java,Java,开发一个类似于创建收据的程序。它需要扫描仪输入:名称和价格。尝试使用try-catch来处理无法将double输入到价格扫描程序中的情况。设法让它工作,但只有当异常被抛出一次;如果我在catch块中再次给出错误的输入,它将失败。我该怎么做才能让程序处理catch中的异常?我也只是一个孩子,用我能得到的任何免费资源学习,所以这里的错误可能只是根本性的问题/糟糕的编码实践,我也希望指出这些问题 谢谢大家! 代码如下: Scanner scanPrice = new Scanner(S
Scanner scanPrice = new Scanner(System.in);
System.out.println("Enter the cost: ");
try {
priceTag = scanPrice.nextDouble();
} catch (InputMismatchException e) {
System.out.println("Only numbers. Enter the cost again.");
scanPriceException = new Scanner(System.in);
priceTag = scanPriceException.nextDouble();
}
costs[i] = priceTag;
这是因为
try
和catch
块只运行一次。如果需要重试直到成功,则需要将其放入循环中。只需更改代码块:
Scanner scanPrice = new Scanner(System.in);
System.out.println("Enter the cost: ");
try {
priceTag = scanPrice.nextDouble();
} catch (InputMismatchException e) {
System.out.println("Only numbers. Enter the cost again.");
scanPriceException = new Scanner(System.in);
priceTag = scanPriceException.nextDouble();
}
致:
如果在nextDouble
上出现InputMismatchException
异常,则try
块将不会到达break
语句
编辑:忘记添加,但您还需要放弃旧输入,这样它就不会再次引发异常。因此,scanPrice.next()。有关更多详细信息,请参阅此答案:此处,而(true)意味着,在您的扫描仪未获得所需输入之前(在本例中为双倍值),它将不断询问您“仅限数字。请再次输入成本。”。
扫描仪获得正确输入的那一刻,在这种情况下不会抛出“InputMismatchException”,并执行try块中的break语句,这将使您的程序控制脱离while循环。我认为在达到某个代表点之前,您无法进行编辑,因此请继续尝试。此外,如果您隔离了要请求的部分,而不是发布整个文件,那就太好了。您应该在try/catch块中捕获异常,然后,根据您的程序目标要求,退出try/catch块,然后通过循环该块或落入不同的try/catch中重试。谢谢,avast加载项不允许我单击“编辑”。你的答案就是答案。我的问题是尝试使用do-while,但不知道在while中使用什么条件。while(true)可以解释一下吗?whiletrue
仅仅意味着无限期地运行循环,直到显式地break
退出循环。
Scanner scanPrice = new Scanner(System.in);
while (true) {
System.out.println("Enter the cost: ");
try {
priceTag = scanPrice.nextDouble();
break;
} catch (InputMismatchException e) {
System.out.println("Only numbers. Enter the cost again.");
scanPrice.next();
}
}