带有 try 和 catch 的 Do-While 循环退出循环而不要求新输入

问题描述 投票:0回答:1

我必须创建一个 do-while 循环来验证任何非双精度且非零的用户输入。我一直在这里环顾四周并谷歌搜索,我正在创建一个无限循环,但我通过清除输入来解决这个问题。但是,现在程序不再要求用户输入,并且循环正在中断。不太确定我打破了什么。这只是代码的一部分,我还必须对 wallWidth 执行此 do-while 循环。

public class Paint1 {

    public static void main(String[] args) {  
        Scanner scnr = new Scanner(System.in);  
        double wallHeight = 0.0;  
        double wallWidth = 0.0;  
        double wallArea = 0.0;  
        double gallonsPaintNeeded = 0.0;  
        boolean decimal = false;  

        
        final double squareFeetPerGallons = 350.0;  
        
        // Implement a do-while loop to ensure input is valid
        // Prompt user to input wall's height
        do {  
            try {  
                System.out.println("Enter wall height (feet): ");  
                wallHeight = scnr.nextDouble();  
                
                if (wallHeight <= 0) { //non zero numbers  
                    throw new Exception("Invalid Input");  
                }  
                decimal = true;  
            }  
            catch (Exception e) {  
                System.out.println("Invalid Input");  
                scnr.nextDouble(); //wipe out user input  
            }  

        } while (!decimal);  

循环停止并在清除无效输入后仍然创建异常而不继续。

输入墙高(英尺): 三十 输入无效 线程“main”中的异常 java.util.InputMismatchException 在 java.base/java.util.Scanner.throwFor(Scanner.java:939) 在 java.base/java.util.Scanner.next(Scanner.java:1594) 在 java.base/java.util.Scanner.nextDouble(Scanner.java:2564) 在 Paint1.main(Paint1.java:31)

java try-catch infinite-loop do-while
1个回答
0
投票

发生的情况是,当您尝试使用

scnr.nextDouble()
擦除用户输入时,它会抛出 InputMistMatchException,但不会处理该异常。这是因为提供的输入与预期类型不匹配。要在您的环境中克服这个问题,您可以使用
scnr.nextLine()
。因为无论你输入什么,它都可以被解释为字符串。

© www.soinside.com 2019 - 2024. All rights reserved.