【发布时间】:2016-11-30 23:27:08
【问题描述】:
我似乎在使用三个用户创建的方法并在主方法中正确调用它们时遇到了问题。我没有任何我知道的语法错误,所以留下了合乎逻辑的错误,参数看起来也很好。
假设该程序的输出类似于下面的最后一个输出。这是一个接受二维数组并检查它是否为magic square 的程序。每种方法都负责审查/检查过程以确定它是否是幻方。
我真的很感激能帮我解决这个问题,我很难过。
代码:
import java.util.Arrays;
public class Magic10
{
// A method to check whether rows equal the target sum
private static boolean rowsEqTargetSum(int[][] a, int targetSum, int n, int row, int col, int sum)
{
// Calculate the sum of each row ... if magic, then equal to targetSum
for(row=0; row<n; row++)
{
System.out.print("row "+row+": ");
for(col=0; col<n; col++)
{
int value = a[row][col];
sum += value;
if (col > 0)
System.out.print(" + "); // print plus before all except 1st
System.out.print(value);
}
System.out.println(" = "+sum);
if(sum != targetSum)
{
System.out.println("Row sum incorrect : Not a magic Square!");
}
}
return rowsEqTargetSum(null, 0, sum, sum, sum, sum);
}
// A method to check whether diagonals equal the target sum
private static boolean diagonalEqTargetSum(int[][] a, int targetSum, int n, int row, int col, int sum)
{
System.out.print("diagonal: ");
for(int pos=0; pos<n; pos++)
{
row = n-1 - pos;
col = pos;
int value = a[row][col];
sum += value;
if (pos > 0)
System.out.print(" + "); // print plus before all except 1st
System.out.print(value);
}
System.out.println(" = "+sum);
if(sum != targetSum)
{
System.out.println("Diagonal is incorrect : Not a magic Square!");
}
return diagonalEqTargetSum(null, 0, 0, sum, sum, sum);
}
// A method to check whether all numbers are used exactly once in the 2D array
private static boolean allNumbersRepresented(int[][] a, int n, int col, int row)
{
// Lastly, we check that every number from 1 to n is represented
final int nSquare=n*n;
boolean[] flag= new boolean[n*n];
for(row=0; row<n; row++)
{
for(col=0; col<n; col++)
{
int num = a[row][col];
if (n < 1 || num > nSquare)
{
System.out.println("Number out of range : Not a magic Square!");
}
if (flag[num-1])
{
System.out.println("Duplicate number : Not a magic Square!");
}
flag[num-1] = true;
}
}
return allNumbersRepresented(null, 0, 0, 0);
}
public static void main(String []args)
{
int[][] a ={{4,9,2},
{3,5,7},
{8,1,6}};
final int n=a.length;
final int targetSum=n*(n*n+1)/2;
System.out.println(" The following two dimensional array is Magic!");
for (int i = 0;i< a.length;i++)
{
System.out.println(Arrays.toString(a[i]));
}
// Calls rowsEqTargetSum Method
if (!rowsEqTargetSum(a, targetSum, targetSum, targetSum, targetSum, targetSum))
{
return;
}
// Calls diagonalEqTargetSum Method
if (!diagonalEqTargetSum(a, targetSum, targetSum, targetSum, targetSum, targetSum))
{
return;
}
// Calls allNumbersRepresented Method
if (!allNumbersRepresented(a, targetSum, targetSum, targetSum))
{
return;
}
}
}
当前输出(调用方法有问题?)
The following two dimensional array is Magic!
[4, 9, 2]
[3, 5, 7]
[8, 1, 6]
row 0: 4 + 9 + 2Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at Magic10.rowsEqTargetSum(Magic10.java:14)
at Magic10.main(Magic10.java:91)
输出看起来有点像这样:
row 0: 4 + 9 + 2 = 15
row 1: 3 + 5 + 7 = 15
row 2: 8 + 1 + 6 = 15
diagonal: 8 + 5 + 2 = 15
The following two dimensional array is Magic !
[4, 9, 2]
[3, 5, 7]
[8, 1, 6]
【问题讨论】:
-
"遇到麻烦" -- 这是什么意思?请澄清并准确解释正在发生的事情以及您期望发生的事情。包括任何错误消息和/或堆栈跟踪。
-
我对问题是什么感到困惑,我以为我正确调用了方法并正确设置了它们,但我不知道我做错了什么。
-
什么不起作用。就像它应该做的,但没有做。
-
它应该有一个类似于我上面输入的输出。这是一个程序,它接受一个二维数组并检查它是否是一个幻方 (en.wikipedia.org/wiki/Magic_square)。每种方法都有责任审查/检查过程以确定它是否是幻方。
标签: java arrays loops if-statement methods