gpt4 book ai didi

java - 一方面是无限循环,另一方面是 NoSuchElementException

转载 作者:太空宇宙 更新时间:2023-11-04 15:21:12 24 4
gpt4 key购买 nike

我最近询问是否有任何可能的方法可以通过使用 Scanner 为 String 变量赋值来获得异常(线程是 here: )

其中一个人告诉我,CTRL+D 可能会引发 NoSuchElementException 。这对我来说是一种特殊情况,因为 input.nextLine() 返回一个字符串,而字符串基本上可以是用户可以在键盘上键入的任何内容,因此人们会假设 input .nextLine() 不会引发异常。

因此,我决定在我正在编写的程序中添加一些 try catch block ,以防程序要求输入数字时按下 CTRL+D。

我遇到的问题是,当我捕获 CTRL+D 异常时,需要刷新 Scanner,但是如果我刷新 Scanner,它将导致出现 NoSuchElementException,因为不存在新行。我在一段时间内真正循环地使用了这一切,所以我有点进退两难。

我将发布该代码的一个版本,其中 input.nextLine() 被注释掉。如果按原样运行它,您将在需要刷新扫描仪时发生无限循环。如果取消注释 input.nextLine(),该行代码本身就会导致 NoSuchElementException

import java.util.NoSuchElementException;



private int getMainOptions(){

System.out.printf("\n********** Main Options **********");
System.out.printf("\n*%32s*", "");
System.out.printf("\n* %-30s*", "[1] Create Customer");
System.out.printf("\n* %-30s*", "[2] Create Reservation");
System.out.printf("\n* %-30s*", "[3] Display Customer");
System.out.printf("\n* %-30s*", "[4] Display Reservation");
System.out.printf("\n*%32s*", "");
System.out.printf("\n**********************************");

while(true){
try{

System.out.print("\nChoose Option: ");

if(input.hasNextInt()){
return input.nextInt();
}

System.out.print("\nInvalid option");
input.nextLine();
continue;
}

catch(NoSuchElementException e){
System.out.print("\nAn exception occurred.");
//input.nextLine();
}
}


}

除了在 while 循环内创建 Scanner 并在下一次迭代中重新创建的 catch 中销毁它之外,还可以采取什么措施来解决这个问题?

最佳答案

input.nextLine() 被注释掉或者当 input.hasNextLine() 需要检查时,代码会进入无限循环,因为它位于while(true) 循环没有任何东西可以阻止它,因为 input.nextInt() 没有被调用。 if(input.hasNextInt()) 不会等待 int,而是在输入不存在 int 时简单地跳过 if 语句内的代码。而是尝试这个:

while(true){
try{
System.out.print("\nChoose Option: ");
String in=input.nextLine();
try{
int i=Integer.parseInt(in);
return i;
}catch(NumberFormatException ex)
{
System.out.print("\nInvalid option");
}
}
catch(NoSuchElementException e){
System.out.print("\nAn exception occurred.");
//input.nextLine();
}
}
}

我希望这有帮助,并且我正确理解了这个问题

关于java - 一方面是无限循环,另一方面是 NoSuchElementException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20364959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com