我不想问,但我想不出这个任务,当我寻求帮助时,助教也不知道。
我必须从文本文件中获取输入,将文件中的整数输入到数组列表中,并测试它是否为n×n幻方。N等于数组列表长度的平方根。如果它不是一个完美的正方形,它就会立即通过魔法平方测试。
无论如何,我已经快完成了;我只是不明白我的教授在魔术平方测试的最后一步告诉我们/要求我们做什么。
最后四个步骤之前的所有测试都是完美无缺的。我将在步骤之后发布我的当前代码。
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语句永远不会运行。因此,它将排除一切测试作为一个魔术广场?
很抱歉发了这么长的邮件,但这很让人困惑。
发布于 2015-11-10 08:15:44
根据您最新的要求。一个完整的例子。
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
}发布于 2015-11-10 08:06:08
您从不更改for-循环中的row和col,这是一个bug。为了更容易理解,我建议在rowIndex和colIndex上使用两个嵌套的For -循环,并使用一个小助手从一维数组中获得值,如下所示:
int getValue(int row, int col){
return magicSquare.get( row * _n + col );
}假设一维阵列是一个“扁平”的正方形,它像(0, 0),(0,1),……(0,_n),(1,0),……(_n,_n)
为了使它更清楚:迭代平方,而不是使用索引:
for( int row = 0 ; row < _n ; row++){
for( int col = 0 ; col < _n ; col++){
// Your stuff here.
}
}https://stackoverflow.com/questions/33625056
复制相似问题