我正在创建升力模拟,但我遇到了错误处理问题。当用户输入一个字母而不是整数时,它会抛出一个InputMismatchException。我该如何解决? 以下是代码:
System.out.println("Please define... ");
System.out.println("Number of floors:");
Building building = new Building(in.nextInt());
System.out.println("Number of lifts:");
building.setNoOfLifts(in.nextInt());
building.setLifts();
System.out.println("Maximum number of people to enter building at one time:");
building.setMaxPeople(in.nextInt());
System.out.println("Maximum capacity of the lifts:");
int maxLiftCapacity = in.nextInt();
System.out.println("Simulation will now begin.");
Queue queue = new Queue();
答案 0 :(得分:2)
这里有一些可能有所帮助的代码。读取整数并在循环中捕获异常。当输入是整数时,循环退出。抛出异常时,循环继续。
Scanner sc = new Scanner(System.in);
int i=0;
while(true) {
System.out.println("enter an integer:");
try {
int i = sc.nextInt();
break;
} catch(InputMismatchException ignore){}
}
// i has been read successfully
答案 1 :(得分:0)
nextInt()
仅适用于您确定接下来会获得积分值的情况。 (也就是说,输入来自比用户更可靠的源。)
我有什么建议?最广泛的输入范围是String
,所以请选择其中一个。这看起来可能如下所示。
String strFloors = in.nextLine();
strFloors = strFloors.replaceAll("[^\\d]", ""); // Strip non 1234567890 characters
intFloors = Integer.valueOf(strFloors);
Building building = new Building(intFloors);
或者如果你想把它放在一行中,你可以像
一样把它放在一起Building building = new Building(Integer.valueOf(in.nextLine().replaceAll("[^\\d]", "")));
最好的错误处理是确定没有出现。