Java中的用户输入和异常

Java中的用户输入和异常,java,loops,exception,java.util.scanner,user-input,Java,Loops,Exception,Java.util.scanner,User Input,我想根据用户输入向列表中添加一个整数。用户必须键入他/她想要的所有整数,然后按enter键。如果他们输入完整数,他们应该按“回车”按钮而不输入任何内容 我已经编写了代码,但是有几个错误 异常不断出现,因为每次比如说我输入整数10,然后我就完成了。我按“回车”键时什么也没有。这引发了一个例外。我如何解决这个问题 还有一件事,我如何制作程序,如果用户输入了无效的输入,而不是崩溃或中断。它再次要求用户提示正确的输入 这就是我所做的 package basic.functions; import jav

我想根据用户输入向列表中添加一个整数。用户必须键入他/她想要的所有整数,然后按enter键。如果他们输入完整数,他们应该按“回车”按钮而不输入任何内容

我已经编写了代码,但是有几个错误

异常不断出现,因为每次比如说我输入整数10,然后我就完成了。我按“回车”键时什么也没有。这引发了一个例外。我如何解决这个问题

还有一件事,我如何制作程序,如果用户输入了无效的输入,而不是崩溃或中断。它再次要求用户提示正确的输入

这就是我所做的

package basic.functions;
import java.util.*;
import java.text.DecimalFormat;

public class Percent {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        reader.useDelimiter(System.getProperty("line.separator"));
        List<Integer> list = new ArrayList<>();
        System.out.println("Enter Integer: ");

        while (true) {
            try {
                int n = reader.nextInt();
                list.add(Integer.valueOf(n));
            } catch (InputMismatchException exception) {
                System.out.println("Not an integer, please try again");
                break;

            }
        }
        reader.close();
   }
}
while(true)
通常是一个坏兆头,如果你的代码中有这样的东西,你几乎肯定是错的

您可能想要的是这样的:

String input;
do {
  input = reader.next();
  // Parse the input to an integer using Integer.valueOf()
  // Add it to the list if it succeeds
  // You will need your try/catch etc here
while (!input.isEmpty());
在这里,循环检查退出条件并运行,直到满足它。您的处理仍在循环内正常进行,但程序流程要干净得多。

我建议您使用来识别是否输入了整数。至于“用户按enter键而不键入任何内容”,我们可以简单地使用该方法


注意-在这种情况下,您不需要捕获
输入不匹配异常
,因为它不会被抛出。

我想您误解了我的意思。它不是用户输入enter。如果用户在不输入任何内容的情况下按enter键,则会发生错误。然后停下来谢谢,这是我刚开始的时候,但是有人告诉我要改变它。下面那个家伙。因为我想抛出异常。这样做的目的是,如果用户输入无效的输入,将出现一条错误消息,要求用户重新提示。@Kutam请参阅我的更新,该更新会在用户未输入正确数据时通知用户输入正确的数据。另外,由于
扫描器
有一些方法可以帮助您知道输入的是
int
double
字符串
等等,因此我们不需要关心
try/catch
,这会使您的代码看起来很混乱。这是一项简单的任务,只需使用
扫描仪
的方法即可完成
String input;
do {
  input = reader.next();
  // Parse the input to an integer using Integer.valueOf()
  // Add it to the list if it succeeds
  // You will need your try/catch etc here
while (!input.isEmpty());
while (true) {
     if(reader.hasNextInt()) list.add(reader.nextInt());
     else if(reader.hasNext() && reader.next().isEmpty()) break;
     else System.out.println("please enter an integer value");
}