java - 多维数组计算

标签 java arrays multidimensional-array

我正在尝试计算 20x20 网格中四个相邻数字(整数)之间的最大乘积。

这就是我到目前为止所拥有的......

/**
 * The maxProduct method is used to compute the largest product across four 
 * consecutive integers (either horizontally, vertically, or diagonally).
 * 
 * @param gridData    - A 20x20 array containing the integer values.
 * @return maxProduct - The largest product.
 */
private static int maxProduct(int[][] gridData)
{
    int maxProduct = 0;
    int currentProduct = 0;

    // Compute the products across the columns.
    for (int row = 0; row < 20; row++)
        for (int column = 0; column < 17; column++)
        {
            currentProduct = gridData[row][column] 
                    * gridData[row][column + 1] * gridData[row][column + 2] 
                    * gridData[row][column + 3];

            if (currentProduct > maxProduct)
            {
                maxProduct = currentProduct;
            }

        }

    // Compute the products across the rows.
    for (int column = 0; column < 20; column++)
        for (int row = 0; row < 17; row++)
        {
            currentProduct = gridData[row][column]
                    * gridData[row + 1][column] * gridData[row + 2][column]
                    * gridData[row + 3][column];

            if (currentProduct > maxProduct)
            {
                maxProduct = currentProduct;
            }
        }

    // Compute the products across the right diagonals.
    for (int column = 0; column < 17; column++)
        for (int row = 0; row < 17; row++)
        {
            currentProduct = gridData[row][column]
                    * gridData[row + 1][column + 1]
                    * gridData[row + 2][column + 2]
                    * gridData[row + 3][column + 3];

            if (currentProduct > maxProduct)
            {
                maxProduct = currentProduct;
            }

        }


    // Compute the products across the left diagonals.
    for (int column = 19; column < 3; column--)
        for (int row = 0; row < 17; row++)
        {
            currentProduct = gridData[row][column]
                    * gridData[row + 1][column - 1]
                    * gridData[row + 2][column - 2]
                    * gridData[row + 3][column - 3]; 

            if (currentProduct > maxProduct)
            {
                maxProduct = currentProduct;
            }
        }

    return maxProduct;
}

我从我的另一个项目复制了这段代码(它恰好是一款使用 8x8 网格的 Connect 4 游戏)。显然我的 Connect 4 游戏代码不起作用。我的左对角线未能通过测试用例,我确信我已经通过此方法解决了问题。

功能应该是相同的(就计算乘积而言),但我没有找到正确的值。

我的逻辑哪里错了?

最佳答案

我看到的问题是这一行:

for (int column = 19; column < 3; column--)

这将是 false 开始,并且该 block 永远不会执行。您可能需要

for (int column = 19; column >= 3; column--)

使用 >= 使 column 的最后一个有效值为 3(因此 column - 3 的计算结果为 0 然后你到达左侧)。

关于java - 多维数组计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16599361/

相关文章:

java - Android 应用程序通过 post 将数据上传到 python 服务器

java - 无法在短时间内发送太多电子邮件

python - 在 python 中设置一个数组等于其条目的前半部分

python - 什么时候 array.array 比列表更有效?

java - 我可以做一个二维数组,它的元素是 List

Java 2D 数组 : Multiplication Table

c++ - 初始化多维 vector

java - JPA EntityManager 是否有无状态版本?

c++ - C/C++ Arrays 多维数组

java - 这个 "synchronized"可以工作吗?