我想根据用户输入将整数添加到列表中。用户必须键入他/她希望的所有整数,然后按Enter。如果他们完成输入整数,则应该按" Enter"按钮而无需输入任何内容。
我做了我的代码,但是有几个错误
例外情况一直在弹出,因为每次都说例如输入Integer 10,然后我完成了。我一无所有地按" Enter"。这提出了例外。我如何解决这个问题?
还有另一件事,我该如何制作程序,以便用户将输入无效,而不是崩溃或崩溃。它要求用户再次提示正确的输入。
这就是我所做的
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]
我建议您使用Scanner#hasNextInt
确定是否已输入整数。至于"用户按输入而无需输入任何内容" ,我们可以简单地使用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");
}
NOTE - 在这种情况下,您无需捕获InputMismatchException
,因为它不会被扔。
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());
在这里,循环正在检查出口条件并运行直到达到它为止。您的处理仍在循环内部正常进行,但程序流动得多。