Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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_2d - Fatal编程技术网

Java 二维数组中每个对角线的求和

Java 二维数组中每个对角线的求和,java,arrays,2d,Java,Arrays,2d,我的部分家庭作业有问题。从本质上讲,我们要做的是取一个2D数组,数组中充满随机数,并对每行、每列和每对角线求和。我已经算出了行和列,但无法得到对角线。以下是我关于对角线的代码: for (int c = 0 ; c < columnCount; c++) { int sum = 0; for (int i = (7 - c); i >= 0; i--) { sum += board[(7 - c) - i][i]; } re

我的部分家庭作业有问题。从本质上讲,我们要做的是取一个2D数组,数组中充满随机数,并对每行、每列和每对角线求和。我已经算出了行和列,但无法得到对角线。以下是我关于对角线的代码:

for (int c = 0 ; c < columnCount; c++)
{
    int sum = 0;

    for (int i = (7 - c); i >= 0; i--) 
    {
        sum += board[(7 - c) - i][i];
    }

   return sum;
}
正如您所看到的,我只对电路板的一半进行了求和(每次都是从右上角到左下角)。如果有人对此有见解的话,我最终也需要求反方向的对角线的和


我已经在这里和其他网站上浏览过了,但我唯一能找到的是如何求主要对角线的和。我需要对8X8板上的每个对角线求和。我真的考虑过这个问题,但无论我做什么尝试,我都无法在不越界的情况下获得其他值。谢谢你的帮助

有很多选择可以做到这一点。根据您当前使用的方法(并尝试与之保持一致),我建议从第1-7行开始,完成缺少的总和(提示:对于剩余项,从右边缘开始,然后向下和向左移动)

pmkrefeld在评论中链接到的问题包含了这样做的代码(好吧,假设我没有看它,也不知道它是否真的有效)。那里的答案刚刚公布。这是一个有效的代码,但您将通过尝试自己实现它来了解更多


有时候把这些问题写在纸上会有帮助。画出你的阵列,然后想:人类会怎么做?如果你能以这种方式想出一个清晰的算法,并对其进行仔细研究,那么将其转换为Java(或任何语言)将变得非常简单。

要计算矩阵的剩余部分,你可以在代码下面插入两个嵌套的For循环。像这样的-

    sum = 0;
    int t,k;
    int result[] = new int[20];
    for(c = 1; c <= 7; c++) {
        t = c;
        for(i = 7; i >= c; i--) {
            sum += board[i][t];
            t++;
        }
        result[k] = sum;    // result[k] will store each diagonal sum
        k++;
        sum = 0;
    }
sum=0;
int t,k;
整数结果[]=新整数[20];
对于(c=1;c=c;i--){
总和+=董事会[i][t];
t++;
}
结果[k]=总和;//结果[k]将存储每个对角线和
k++;
总和=0;
}

能否确保您的代码片段准确无误?我更正了缩进,在
for
循环之后,您可能缺少了一个预期的
{
。在google上运行20秒后:我尝试使用链接代码,但它对我无效。它所做的量与我的代码所做的量相同(直到主对角线)然后给了我一个索引越界异常。我试着把它写出来,但它最终返回到我已经做过的对角线上。只是好奇你是否还有其他提示(我不希望你写我的代码,但我真的很感激)如果尝试访问超出范围的索引,则会出现索引超出范围异常。阻止此异常的方法是不访问超出范围的索引。因此,如果必须,请执行范围检查,或者修改逻辑以避免发生这种情况。
    sum = 0;
    int t,k;
    int result[] = new int[20];
    for(c = 1; c <= 7; c++) {
        t = c;
        for(i = 7; i >= c; i--) {
            sum += board[i][t];
            t++;
        }
        result[k] = sum;    // result[k] will store each diagonal sum
        k++;
        sum = 0;
    }