Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多维数组计算_Java_Arrays_Multidimensional Array - Fatal编程技术网

Java 多维数组计算

Java 多维数组计算,java,arrays,multidimensional-array,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

我试图计算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;
}
/**
*maxProduct方法用于计算四个变量之间的最大乘积
*连续整数(水平、垂直或对角)。
* 
*@param gridData-包含整数值的20x20数组。
*@return maxProduct-最大的产品。
*/
私有静态int-maxProduct(int[][]gridData)
{
int-maxProduct=0;
int currentProduct=0;
//计算跨列的乘积。
用于(int行=0;行<20;行++)
for(int列=0;列<17;列++)
{
currentProduct=gridData[行][列]
*gridData[行][列+1]*gridData[行][列+2]
*gridData[行][列+3];
如果(currentProduct>maxProduct)
{
maxProduct=currentProduct;
}
}
//计算跨行的乘积。
for(int列=0;列<20;列++)
对于(int行=0;行<17;行++)
{
currentProduct=gridData[行][列]
*gridData[第1行][列]*gridData[第2行][列]
*gridData[行+3][列];
如果(currentProduct>maxProduct)
{
maxProduct=currentProduct;
}
}
//计算右对角线上的乘积。
for(int列=0;列<17;列++)
对于(int行=0;行<17;行++)
{
currentProduct=gridData[行][列]
*gridData[行+1][列+1]
*gridData[行+2][列+2]
*gridData[行+3][列+3];
如果(currentProduct>maxProduct)
{
maxProduct=currentProduct;
}
}
//计算左对角线上的乘积。
对于(int列=19;列<3;列--)
对于(int行=0;行<17;行++)
{
currentProduct=gridData[行][列]
*gridData[行+1][列-1]
*gridData[行+2][列-2]
*gridData[第3行][第3列];
如果(currentProduct>maxProduct)
{
maxProduct=currentProduct;
}
}
退货产品;
}
我从我的另一个项目复制了这段代码(碰巧是一个使用8x8网格的Connect 4游戏)。显然,我的连接4游戏的代码不起作用。我的左对角线没有通过测试用例,我确信我已经用这个方法解决了这个问题

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


我的逻辑哪里错了?

这个循环似乎错了:
列=19;柱<3;列--
您将永远不会执行单个迭代。也许你的意思是
column>3

这个循环似乎是错误的:
column=19;柱<3;列--
您将永远不会执行单个迭代。也许你的意思是
column>3

我看到的问题是这一行:

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

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

我看到的问题是这一行:

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

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

嘿,简单的错误。这就解决了问题。谢谢你帮我接过来!您应该使用
column>=3
,以便还检查第0-3列的大小写。如果您使用
column>3
,那么最后一个案例将检查第1-4列。我集成了该修复程序,只是忽略了它。谢谢大家!嘿,简单的错误。这就解决了问题。谢谢你帮我接过来!您应该使用
column>=3
,以便还检查第0-3列的大小写。如果您使用
column>3
,那么最后一个案例将检查第1-4列。我集成了该修复程序,只是忽略了它。谢谢大家!