过去一个小时,我研究了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)'?
答案 0 :(得分:1)
while(true)
的作用是使它运行直到输入有效并到达return
语句为止。当到达return
语句时,它将退出方法/循环
这是因为不能保证将执行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
显然这不是我们想要的!