Java 迭代二维数组;魔方

Java 迭代二维数组;魔方,java,multidimensional-array,Java,Multidimensional Array,在我的夏季Java课程中,我正在编写一个程序来检测数组中的元素是否是幻方。我不完全确定如何正确地遍历数组,以便能够计算单独的列和行的总数,从而确定数组是否为幻方。我们得到了下行对角线和的代码,但我不确定如何接近上行对角线、行和列。这里是我迄今为止的一段代码 public class MagicSqaure { public static void main(String[] args) { int[][] array = {

在我的夏季Java课程中,我正在编写一个程序来检测数组中的元素是否是幻方。我不完全确定如何正确地遍历数组,以便能够计算单独的列和行的总数,从而确定数组是否为幻方。我们得到了下行对角线和的代码,但我不确定如何接近上行对角线、行和列。这里是我迄今为止的一段代码

public class MagicSqaure
{
    public static void main(String[] args)
    {
        int[][] array = 
        {
            {2, 7, 6},
            {9, 5, 1},
            {4, 3, 8}
        };  

public static int getSumOfDownDiagonal(int[][] array)
{
    int total = 0;
    for (int i = 0; i < array.length; i++)
    {
        total += array[i][i];
    }
    return total;
}       
公共类MagicSqaure
{
公共静态void main(字符串[]args)
{
int[][]数组=
{
{2, 7, 6},
{9, 5, 1},
{4, 3, 8}
};  
公共静态int getSumOfDownDiagonal(int[][]数组)
{
int-total=0;
for(int i=0;i
由于它是一个类,我只能提供如何完成行、列和向上对角线的遍历的帮助,但没有提供**任何代码*。正确的实现取决于您,否则您不是在学习,而是在复制/粘贴/成为僵尸编码器

  • 要遍历每一行,请按如下方式遍历数组的元素:

    total += array[i][j];
    
    total += array[i][j];
    
    total += array[i][j];
    
    其中,
    i
    不会改变,但
    j
    会改变

  • 要遍历每列,请按如下方式遍历数组数组的元素:

    total += array[i][j];
    
    total += array[i][j];
    
    total += array[i][j];
    
    其中,
    i
    改变,但
    j
    不会改变

  • 要遍历上对角线,请按如下方式遍历数组的元素:

    total += array[i][j];
    
    total += array[i][j];
    
    total += array[i][j];
    
    其中,
    i
    从数组的最后一个可能索引开始,
    j
    从数组的第一个索引开始


每当我需要推导某些行为的方程式时,我只需手动写出一些答案,然后查找模式。首先,我们假设这是访问数组中项目的方式:

       column
        0 1 2
       --------
    0 | 2 7 6
row 1 | 9 5 1
    2 | 4 3 8

(Using array[column][row])
现在,让我们获取列的索引:

column 0 = {2, 9, 4} = array[0][0], array[0][1], array[0][2]
column 1 = {7, 5, 3} = array[1][0], array[1][1], array[1][2]
以下是行:

row 0 = {2, 7, 6} = array[0][0], array[1][0], array[2][0]
row 1 = {9, 5, 1} = array[0][1], array[1][1], array[2][1]
这是另一条对角线:

3x3 array = {4, 5, 6} = array[0][2], array[1][1], array[2][0]
4x4 array = array[0][3], array[1][2], array[2][1], array[3][0]
注意到任何模式吗?对于对角线,我们从数组[0][array.length-1]开始,到数组[array.length-1][0]结束。这意味着我们的循环如下:

int total = 0;
for (int i = 0; i < array.length; i++)
{
    total += array[i][array.length - 1 - i];
}
return total;
int-total=0;
for(int i=0;i
对一列求和,应该是:

int total = 0;
for (int i = 0; i < array.length; i++)
{
    total += array[column_index][i];
}
return total;
int-total=0;
for(int i=0;i
对于行:

int total = 0;
for (int i = 0; i < array.length; i++)
{
    total += array[i][row_index];
}
return total;
int-total=0;
for(int i=0;i

编辑:为了回应否决票和评论,我修改了幻方码以适应行的主要约定。哦,等等,不,我没有修改,因为代码是相同的。无论如何,这就是你要做的。

你的代码缺少2个大括号。但确切的问题是什么?@WaleryStrauch我不确定如何接近上对角线、行和列。Java中的约定是
array[row][column]
,而不是
array[column][row]