我在使用需要搜索包含座位价格信息(简单学校项目)的最终静态数组的方法时遇到了一些麻烦。
座位价格数量如下(称为seatArray):
10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10 10
10 10 20 20 20 20 20 20 10 10
10 10 20 20 20 20 20 20 10 10
10 10 20 20 20 20 20 20 10 10
20 20 30 30 40 40 30 30 20 20
20 30 30 40 50 50 40 30 30 20
30 40 50 50 50 50 50 50 40 30
在代码上,我有一个方法需要搜索数组并找到包含该价格的所有席位。如果找到与价格匹配的座位,它会将价格添加到具有相同尺寸(9x10)的空2D阵列(称为matchedSeats)。
这就是我到目前为止,它目前用价格而不是匹配的席位填满整个阵列。
static void price()
{
Scanner inputInt = new Scanner(System.in);
System.out.println("What price seat are you looking for? ("
+ "$10, $20, $30, $40, $50)");
int price = inputInt.nextInt();
if((price < 10 || price > 50) || price % 10 != 0)
{
System.out.println("Incorrect price.");
price();
}
int[][] matchedSeats = new int[9][10];
for(int i = 0; i < ROWS; i++)
{
for(int j = 0; j < COLUMNS; j++)
{
if(seatingArray[i][j] == price)
{
matchedSeats[i][j] = price;
}
}
}
}
*只是快速编辑,错误是当打印了matchedSeats数组时,数组中的所有值都被用户输入的价格变量覆盖。我从Hovercraft Full Of Eels得到了答案:条件语句中的逻辑检出,但我使用的打印方法导致错误。
答案 0 :(得分:0)
您发布的代码和您描述的错误行为似乎不匹配。事实上,你的代码对我来说很好看:
for(int i = 0; i < ROWS; i++)
{
for(int j = 0; j < COLUMNS; j++)
{
if(seatingArray[i][j] == price)
{
matchedSeats[i][j] = price;
}
}
}
你确定这是行为不端吗?你在哪里打印出matchSeats数组来测试它?
我不认为你应该使用递归,特别是不喜欢你这样做:
if((price < 10 || price > 50) || price % 10 != 0)
{
System.out.println("Incorrect price.");
price();
}
因为如果输入了错误的价格数据,而方法调用将以递归方式重复,那么价格方法将会在坏数据的情况下完成。
相反,将您请求价格输入的代码放入一个重复的循环中,直到输入有效价格为止。
另外,请避免使用您正在使用的幻数。所以而不是:
int[][] matchedSeats = new int[9][10];
做类似的事情:
int[][] matchedSeats = new int[ROWS][COLUMNS];