我是一个初学者,我正在我的程序中尝试错误处理。我的程序的目的是“预订”一场音乐会,我创建了一个预订座位的方法。然而,有几种方法可以让用户输入错误的数字,所以我尝试创建我自己的异常,并在用户输入的行数或列数不在座位安排中时抛出它。
我发现的问题是,我必须使用if语句来检查用户输入的数字(即二维数组的索引号)是否确实在数组元素中,而我为这段代码编写的内容并不适用。
我想抛出一个错误,告诉用户输入了不正确的行和列,然后继续执行代码的其余部分。
这是我创建的异常的代码。
public class ArrayInputMismatchException extends Exception {
public ArrayInputMismatchException() {}
public ArrayInputMismatchException(String message) {
super(message);
}
}
这是我的错误处理和用户输入验证代码。
int rowSeat = 0;
int colmnSeat = 0;
try {
System.out.println("What is the row number that your seat is in?");
rowSeat = userNum.nextInt();
System.out.println("\nWhat is the column number that your seat is in?");
colmnSeat = userNum.nextInt();
arr1[rowSeat - 1][colmnSeat - 1] = 1; //this is to change the element in the array that symbolizes a seat to '1' to show its now booked, before it was 0 to show its available and since they chose this seat, it's now 1...
if ((rowSeat || colmnSeat) != arr1[rowSeat][colmnSeat]) { //I put my conditional like this for now, but I'm not sure what else to replace it with to check the user input is equilvalent to the array index
ArrayInputMismatchException e = new ArrayInputMismatchException("Something went wrong: You cannot enter a number that is not a valid row or column.");
throw e;
} //this is my error message that I want to happen, for example if the seating arrangment in up to a 4x3 and the user inputs row 13, then the error should appear, same with if they enter column 10 then an error message should appear
}
catch (InputMismatchException e) {
System.out.println("\nAn error occured: You cannot enter any character or symbol other than a valid number for the row and column of the chosen seat for booking. " + e);
} //this is an exception that appears when they input a string instead of a number, like 'k' or '?' instead of a valid number present in the rows and columns, it already works so i'm not that worried about it
`
提前感谢大家的帮助!
1条答案
按热度按时间mitkmikd1#
你写的if语句不能编译。你在那里做的组合在java中是不可能的。你可以有这样的东西
但这对您没有帮助。该语句将检查数组中的值是否不等于用户选择的行或列。
您有两个选项:
1.执行手动索引检查或
1.让handle java执行索引检查。
首先,在为
arr1
赋值**之前,**需要检查用户输入,因此if语句需要在colmnSeat = userNum.nextInt();
之后立即执行。您需要执行以下操作:
首先,数组从0开始。因此,给定一个4的数组,第一个元素的索引为0,最后一个元素的索引为3(而不是4!)。如果你试图访问arr [4],你会得到一个错误(ArrayIndexOutOfBoundsException),你的程序会停止。
这就是为什么我们需要检查负输入,其次我们需要检查,值是否大于或等于数组的大小。
首先它检查值是否为负,然后检查值是否超出界限。二维数组实际上是一个由以下结构的数组组成的数组:
其中row1-col1是
arr1[0,0]
的值。在此结构中,外部数组保存具有值的数组。因此,当仅调用外部数组时,您将获得一行的数组:这些价值观就是这样产生的:
每当你试图从一个数组中访问一个值,而这个数组的索引并不存在(要么太大要么太小),java就会抛出
ArrayIndexOutOfBoundsException
。我们可以利用这个事实在第二个catch块中捕捉这个错误,它可以通过以下方式附加到你的代码中: