对于我的夏季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;
}
答案 0 :(得分:0)
因为它是一个类,所以我只能提供如何完成遍历行,列和对角线的帮助,但是根本不提供**代码*。由您来做正确的实施,否则您不会学习,而是复制/粘贴/成为僵尸编码器。
要遍历每一行,请遍历数组数组中的元素,如下所示:
total += array[i][j];
i
未改变但j
更改的地方。
要遍历每一列,请遍历数组数组中的元素,如下所示:
total += array[i][j];
i
发生变化但j
未发生变化。
要遍历对角线,请浏览数组数组中的元素,如下所示:
total += array[i][j];
其中i
从数组数组的最后一个可能索引处开始,j
从数组数组的第一个索引处开始。
答案 1 :(得分:-2)
每当我需要为某些行为推导出方程时,我只需手动编写一些答案,然后寻找模式。首先,让我们假设这是我们访问数组中项目的方式:
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]
注意任何模式?对于对角线,我们从array [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 < array.length; i++)
{
total += array[column_index][i];
}
return total;
对于行:
int total = 0;
for (int i = 0; i < array.length; i++)
{
total += array[i][row_index];
}
return total;
编辑:为了回应downvotes和评论,我修改了魔术方码以使用行主要约定。哦等等,不,我没有,因为代码是相同的。无论如何,你就是这样做的。