У меня, похоже, возникают проблемы с тремя созданными пользователем методами и их правильное обращение в основном методе. У меня нет никаких синтаксических ошибок, о которых я знаю, поэтому они оставляют логические, параметры тоже выглядят отлично.Java: методы не работают
Программа должна иметь выход, похожий на последний выход ниже. Это программа, которая принимает 2D-массив и проверяет, является ли это 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]
_ «иметь проблемы» _ - что это значит? Просьба уточнить и объяснить, что именно происходит и что вы ожидаете. Включите любые сообщения об ошибках и/или трассировку стека. –
Я запутался в проблеме, я думал, что правильно назвал методы и правильно их настроил, и я не знаю, что я сделал неправильно. – Aramza
Что не работает. как то, что он должен делать, но не делает. – sbowde4