입력 내용이 마법 사각형 행렬을 만들거나하지 않는다는 숙제를 작성했습니다. 매직 스퀘어 행렬에서는 모든 행, 열 및 대각선 합이 동일해야합니다. 행, 열 및 대각선의 합을 계산하는 함수를 작성했습니다. 코드의 끝에서 나는 그것들이 동등한 지 아닌지를 비교할 필요가있다. 함수의 결과를 다른 변수에 할당하고 코드 끝의 if 문에서 함수의 결과를 비교했습니다. 비교를 위해 똑똑한 방법이 있는지 궁금합니다. if 문에는 변수가 너무 많고 평등이 너무 많습니다. 나는 이것을 위해 더 똑똑한 방법이 있다고 믿습니다.if 문에서 너무 많은 변수 비교
package lab03;
import java.util.Scanner;
public class E7_15 {
public static boolean checkNumbers(int[][] array){
for(int i=0; i<4; i++){
for(int j=0; j<4; j++){
if (array[i][j] < 1 || array[i][j] > 16){
System.out.println("You entered a wrong value");
return false;
}
}
}
return true;
}
public static int sumRow(int[][] array, int i){
int sum = 0;
for(int j=0; j<array[i].length; j++){
sum += array[i][j];
}
return sum;
}
public static int sumColumn(int[][] array, int j){
int sum = 0;
for(int i=0; i<array[j].length; i++){
sum += array[i][j];
}
return sum;
}
public static int diagonalSumRightToLeft(int[][] array){
int sum = 0;
for(int i=0; i<array.length; i++){
sum += array[i][array.length-1-i];
}
return sum;
}
public static int diagonalSumLeftToRight(int[][] array) {
int sum = 0;
for(int i=0; i<array.length; i++){
sum += array[i][i];
}
return sum;
}
public static void main (String [] args){
int[][] intArray = new int [4][4];
Scanner in = new Scanner(System.in);
for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
System.out.println("!!!Please enter your numbers between 1-16!!!");
System.out.println("Enter your number for row " + (i+1) + " and column " + (j+1) + ": ");
intArray[i][j] = in.nextInt();
}
}
boolean done = checkNumbers(intArray);
int sumLRD = diagonalSumLeftToRight(intArray);
int sumRLD = diagonalSumRightToLeft(intArray);
int r1 = sumRow(intArray, 0);
int r2 = sumRow(intArray, 1);
int r3 = sumRow(intArray, 2);
int r4 = sumRow(intArray, 3);
int c1 = sumColumn(intArray, 0);
int c2 = sumColumn(intArray, 1);
int c3 = sumColumn(intArray, 2);
int c4 = sumColumn(intArray, 3);
if (done == true){
if(sumLRD==sumRLD && sumLRD==r1 && sumLRD==r2 && sumLRD==r3 && sumLRD==r4 &&
sumLRD==c1 && sumLRD==c2 && sumLRD==c3 && sumLRD==c4 && sumRLD==r1 && sumRLD==r2 &&
sumRLD==r3 && sumRLD==r4 && sumRLD==c1 && sumRLD==c2 && sumRLD==c3 &&
sumRLD==c4 && r1==r2 && r1==r3 && r1==r4 && r1==c1 && r1==c2 && r1==c3 && r1==c4 &&
r2==r3 && r2==r4 && r2==c1 && r2==c2 && r2==c3 && r2==c4 && r3==r4 && r3==c1 &&
r3==c2 && r3==c3 && r3==c4 && r4==c1 && r4==c2 && r4==c3 && r4==c4 && c1==c2 &&
c1==c3 && c1==c4 && c2==c3 && c2==c4 && c3==c4){
System.out.println("This is a magic square matrix");
}
else {
System.out.println("This is NOT a magic square matrix");
}
}
if (done == false){
System.out.println("WRONG VALUE! START AGAIN!");
}
in.close();
}
은}
영업으로 : 모든 값이 같은지 여부를 확인하기 위해'...'아마 모두를위한 평등을 확인하는 가장 간결한 방법입니다 (변수 인수, 또는 가변 인자로 알려진) allEquals의 구문 숫자의 한 번에, 그러나 당신은 아직 당신의 학문에서 그것에 도착하지 않을지도 모른다. 전달한 모든 인수 중에서 배열을 자동으로 작성합니다. [이 기사에서 java.net] (https://today.java.net/pub/a/today/2004/04/19/varargs.html)은 유용한 문맥을 제공 할 수 있습니다. –
나는 체크를 할 도우미 메서드에서 같은 접근 방식을 사용하는 "테이크 해제 된"대체 테이크를 추가했습니다. – millimoose