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