我不想问,但我想不通这个任务,当我寻求帮助时,TA也想不通。
我必须从文本文件中获取输入,将文件中的整数输入到数组列表中,然后测试它是否是 anxn 幻方。n 等于数组列表长度的平方根。如果它不是一个完美的正方形,它会立即通过幻方测试。
无论如何,我已经差不多完成了;我只是似乎不明白我的教授在魔方测试的最后一步告诉/要求我们做什么。
在这最后四个步骤之前的所有测试都完美无缺。我将在这些步骤之后发布我当前的代码。
让 rowSums 和 colSums 是长度为 n 且条目全为零的两个数组。此外,设 sumDiagMajor 和 sumDiagMinor,分别表示表格左上角到右下角和右上角到左下角的条目之和。
设索引 = 0
重复直到 index = n2 (a) rowSums[row] 增加 ArrayList{index} (b) colSums[col] 增加 ArrayList{index} (c) 如果 row = col,则 sumDiagMajor 增加 ArrayList{index}。(d) 如果 row + col = n−1,则将 sumDiagMinor 增加 ArrayList{index} (e) 将 index 增加 1
如果 sumDiagMajor 等于 sumDiagMinor 以及 rowSums 和 colSums 的每个条目,则该表是一个幻方;否则,它不是。
int rowSums[] = new int[_n];
int colSums[] = new int[_n];
int sumDiagMajor = 0;
int sumDiagMinor = 0;
int row, col;
row = col = 0;
for (int index = 0; index < (n*n); index++)
{
rowSums[row] = rowSums[row] + magicSquare.get(index);
colSums[col] = colSums[col] + magicSquare.get(index);
if (row == col)
{
sumDiagMajor = sumDiagMajor + magicSquare.get(index);
}
if ((row + col) == (n - 1))
{
sumDiagMinor = sumDiagMinor + magicSquare.get(index);
}
}
System.out.println(sumDiagMajor);
System.out.println(sumDiagMinor);
我的问题包括,我是否正确地增加了数组 rowSums 和 rowCols?他从未真正说明如何处理行或列,因此将它们初始化为零是最佳选择吗?
如果到目前为止我所做的一切都是正确的,那么 sumDiagMajor 怎么能等于 sumDiagMinor 因为行总是等于 cols,所以第二个嵌套的 if 语句将永远不会运行。因此它将排除所有测试为幻方?
对不起,很长的帖子,但这很令人困惑。