用户输入和Java中的异常

时间:2017-05-03 14:25:46

标签: java loops exception java.util.scanner user-input

我想根据用户输入在列表中添加一个整数。用户必须键入他/她希望的所有整数,然后按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();
   }
}

输出

Enter Integer: 
10

Not an integer, please try again 
[10]

2 个答案:

答案 0 :(得分:1)

我建议您使用Scanner#hasNextInt来确定是否输入了整数。至于&#34;用户在没有输入任何内容的情况下按下输入&#34; ,我们可以简单地使用String#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");
}

注意 - 在这种情况下,您不需要抓住InputMismatchException,因为它不会被抛出。

答案 1 :(得分:0)

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());

这里的循环是检查退出条件并运行直到它满足它。您的处理仍然在循环内完成,但程序流程更加清晰。