我不想问,但我无法弄清楚这个任务,当我寻求帮助时,助教也不会。
我必须从文本文件中获取输入,将文件中的整数输入到数组列表中,然后测试它是否是anxn幻方。n等于数组列表长度的平方根。如果不是理想的正方形,它将立即无法通过魔方测试。
无论如何我都快完成了;我似乎不明白我的教授在魔方测试的最后一步告诉/要求我们做什么。
最后这四个步骤之前的所有测试都可以正常进行。在步骤之后,我将发布当前代码。
4. 假设rowSums和colSums是长度为n的两个数组,其条目均为零。另外,让sumDiagMajor和sumDiagMinor分别代表表的左上角到右下角和右上角到左下角的条目的总和。 设索引= 0 重复直到index = n2(a)将ArrayList {index}增加rowSums [row](b)将ArrayList {index}增加colSums [col](c)如果row = col,则将sumDiagMajor增加ArrayList {index}。(d)如果row + col = n-1,则将sumDiagMinor增加ArrayList {index}(e)将索引增加1 如果sumDiagMajor等于sumDiagMinor以及rowSums和colSums的每个条目,则该表是一个魔方;否则,事实并非如此。
4. 假设rowSums和colSums是长度为n的两个数组,其条目均为零。另外,让sumDiagMajor和sumDiagMinor分别代表表的左上角到右下角和右上角到左下角的条目的总和。
设索引= 0
重复直到index = n2(a)将ArrayList {index}增加rowSums [row](b)将ArrayList {index}增加colSums [col](c)如果row = col,则将sumDiagMajor增加ArrayList {index}。(d)如果row + col = n-1,则将sumDiagMinor增加ArrayList {index}(e)将索引增加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语句将永远不会运行。因此,它将排除所有测试是否是魔方?
抱歉,很长的帖子,但这很令人困惑。
根据您更新的要求。一个完整的例子。
public static void main(String[] args) { List<Integer> magicSquare = Arrays.asList(2,7,6,9,5,1,4,3,8); int n = (int) Math.sqrt(magicSquare.size()); int rowSums[] = new int[n]; int colSums[] = new int[n]; int sumDiagMajor = 0; int sumDiagMinor = 0; int row = -1; int col = -1; for (int index = 0; index < n*n; index++) { col++; if (col % n == 0) { row++; col = 0; } rowSums[row] = rowSums[row] + magicSquare.get(index); colSums[col] = colSums[col] + magicSquare.get(index); if (row == col) { sumDiagMajor += magicSquare.get(index); } if ((row + col) == (n - 1)) { sumDiagMinor += magicSquare.get(index); } } boolean isMagicSquare = true; for (int i = 0; i < n && isMagicSquare; i++) { isMagicSquare = sumDiagMajor == rowSums[i] && sumDiagMajor == colSums[i]; } isMagicSquare = isMagicSquare && sumDiagMajor == sumDiagMinor; System.out.println(isMagicSquare); // true }