【问题标题】:Scanning and modifying 2D Arrays扫描和修改二维阵列
【发布时间】:2014-01-16 22:45:17
【问题描述】:

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

座位价格数组如下(称为sealingArray):

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) 的空二维数组(称为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数组来测试它?
  • price() 方法似乎是正确的。我有一种感觉 OP 可能有一些被错误更新的全局静态。
  • 我相信你是对的,我重新创建了这个类并且只使用了这个方法和一个打印方法并且它工作正常。有几个全局静态干扰它,我在原始类中的打印方法遇到了关于行的逻辑错误。感谢您的评论!

标签: java arrays


【解决方案1】:

您发布的代码和您描述的不当行为似乎不匹配。事实上,你的代码对我来说看起来不错:

for(int i = 0; i < ROWS; i++)
{
    for(int j = 0; j < COLUMNS; j++)
    {
        if(seatingArray[i][j] == price)
        {
            matchedSeats[i][j] = price;
        }
    }
}

你确定它行为不端吗?你在哪里打印出matchedSeats数组来测试它?


我不认为你应该使用递归,尤其是不像你正在这样做:

if((price < 10 || price > 50) || price % 10 != 0)
{
    System.out.println("Incorrect price.");
    price();
} 

因为如果输入了错误的价格数据,虽然方法调用会递归地重复,但价格方法最终会用错误的数据完成。

相反,将您请求输入价格的代码放入一个 while 循环中,该循环会一直重复,直到输入有效价格为止。


另外,请避免使用您正在使用的幻数。所以而不是:

int[][] matchedSeats = new int[9][10];

做一些类似的事情:

int[][] matchedSeats = new int[ROWS][COLUMNS];

【讨论】:

  • 非常感谢。事实证明,运行条件​​语句的嵌套 for 循环的逻辑如您所说是正确的,但我的打印不正确。我会按照您的建议进行所有更改,这非常有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多