扫描和修改2D阵列

时间:2014-01-16 22:45:17

标签: java arrays

我在使用需要搜索包含座位价格信息(简单学校项目)的最终静态数组的方法时遇到了一些麻烦。

座位价格数量如下(称为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得到了答案:条件语句中的逻辑检出,但我使用的打印方法导致错误。

1 个答案:

答案 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];