有关异常处理的基本Java While(true)问题

时间:2018-09-04 21:56:26

标签: java loops while-loop exception-handling inputmismatchexception

过去一个小时,我研究了while(true)循环,但是找不到关于该循环的答案。

public class Test {
    static Scanner sc = new Scanner(System.in);
    public static void main(String[] args) {
        System.out.println("Enter Integer: ");
        int i = GetAnInteger();
        System.out.println("You entered: " + i);
    }

    public static int GetAnInteger() {
        while (true) {
            try {
                return sc.nextInt();
            }

            catch (InputMismatchException e) {
                sc.next();
                System.out.println("That's not an Integer, try again: ");
            }
        }
    }
}

问题1:我们知道代码中的所有语句将由编译器运行。 while(true)的目的是确保代码可以运行并且可以无限期地运行,方法中的代码将被执行,那么为什么我们首先需要while(true)循环?

问题2:如果删除了“ while(true)”语句,IDE会要求我创建一个return语句或将该方法设置为void,为什么?在这种情况下,“ while(true)”如何工作?

Stack Overflow上的其他帖子大多在争论“ while(true)”是好是坏的原因,我对此并不感兴趣。我很想知道为什么这段代码在没有'while(true)'的情况下会崩溃,我怎么知道何时在其他代码中使用'while(true)'?

  • 我搜索了youtube,java完整参考以及过去半小时的堆栈溢出,但找不到任何答案。这段代码摘自《 Java for Dummies》一书,它没有解释while(true)语句的目的。

2 个答案:

答案 0 :(得分:1)

  1. while(true)的作用是使它运行直到输入有效并到达return语句为止。当到达return语句时,它将退出方法/循环

  2. 这是因为不能保证将执行try部分。如果不是,则该方法需要一些return。您必须为方法的每个可能分支包括一个return语句。 请考虑以下内容:

    try {
         //Oh no! InputMismatchException!!
         return sc.nextInt(); 
         //Goes to catch block
    } catch (InputMismatchException e) {
         sc.next();
         System.out.println("That's not an Integer, try again: ");
         //executes catch block
    }
    //Uh oh. Now what? What gets returned?
    

答案 1 :(得分:0)

  

那么为什么我们首先需要一个while(true)循环?

如果while循环输入的内容不是整数,则用户可以“重试”。当我运行您的程序时,可以执行以下操作:

Enter Integer: 
this
That's not an Integer, try again: 
is
That's not an Integer, try again: 
not
That's not an Integer, try again: 
an
That's not an Integer, try again: 
integer
That's not an Integer, try again: 
1
You entered: 1
  

如果我删除了“ while(true)”语句,IDE会要求我创建一个return语句或将该方法设置为void,为什么?在这种情况下while(true)如何工作?

有了while循环,可以保证最终返回某些内容。没有while循环,如果用户未输入整数,则没有任何返回值。因此,您必须在方法的末尾添加一些内容(默认的返回值,这会破坏程序的意图),或者必须使方法完全没有返回值。

让我们假设我们删除了while循环,并在方法的末尾添加了return 0以使编译器满意。现在,让我们再次尝试上述情形:

Enter Integer: 
this
That's not an Integer, try again: 
You entered: 0

显然这不是我们想要的!