我想根据用户输入在列表中添加一个整数。用户必须键入他/她希望的所有整数,然后按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]
答案 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());
这里的循环是检查退出条件并运行直到它满足它。您的处理仍然在循环内完成,但程序流程更加清晰。