初学者:catch中抛出异常;实现一个循环JAVA

初学者:catch中抛出异常;实现一个循环JAVA,java,Java,开发一个类似于创建收据的程序。它需要扫描仪输入:名称和价格。尝试使用try-catch来处理无法将double输入到价格扫描程序中的情况。设法让它工作,但只有当异常被抛出一次;如果我在catch块中再次给出错误的输入,它将失败。我该怎么做才能让程序处理catch中的异常?我也只是一个孩子,用我能得到的任何免费资源学习,所以这里的错误可能只是根本性的问题/糟糕的编码实践,我也希望指出这些问题 谢谢大家! 代码如下: Scanner scanPrice = new Scanner(S

开发一个类似于创建收据的程序。它需要扫描仪输入:名称和价格。尝试使用try-catch来处理无法将double输入到价格扫描程序中的情况。设法让它工作,但只有当异常被抛出一次;如果我在catch块中再次给出错误的输入,它将失败。我该怎么做才能让程序处理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();
        }

        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)可以解释一下吗?while
true
仅仅意味着无限期地运行循环,直到显式地
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();
        }
    }