Java 比较if语句中的太多变量

Java 比较if语句中的太多变量,java,if-statement,matrix,comparison,Java,If Statement,Matrix,Comparison,我为我的家庭作业写了一个代码,上面写着输入是否创建了幻方矩阵。在幻方矩阵中,所有行、列和对角线之和必须相等。我编写了一些函数来计算行、列和对角线的和。在代码的末尾,我需要比较它们,看它们是否相等。我将函数的结果分配给不同的变量,并在代码末尾的if语句中比较它们。我想知道有没有更聪明的比较方法。我的意思是在我的if语句中有太多的变量和太多的等式。我相信有一个更聪明的方法 package lab03; import java.util.Scanner; public class E7_15 {

我为我的家庭作业写了一个代码,上面写着输入是否创建了幻方矩阵。在幻方矩阵中,所有行、列和对角线之和必须相等。我编写了一些函数来计算行、列和对角线的和。在代码的末尾,我需要比较它们,看它们是否相等。我将函数的结果分配给不同的变量,并在代码末尾的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();
}
lab03包装;
导入java.util.Scanner;
公共类E7_15{
公共静态布尔校验号(int[][]数组){

对于(int i=0;i而言,您似乎在尝试查看所有这些数字是否相等。只需使用一个循环,将列表中的每个变量与后面的变量进行比较:

public boolean allEqual(int... values) {
    for (int i = 0; i < values.length-1; i++) {
        if (values[i] != values[i+1]) {
            return false;
        }
    }
    return true;
}
这是因为等式是可传递的,即如果
a==b
b==c
那么
a==c
(对于任何数量的变量都是相同的)

另一种方法是将整个检查重构为如下内容:

boolean isMagicSquare(int[][] intArray) {
    // check diagonals
    int sum = diagonalSumLeftToRight(intArray);
    if (sum != diagonalSumRightToLeft(intArray)) {
        return false;
    }

    // check rows and columns
    for (int i = 0; i < 4; i++) {
        if (sum != sumRow(intArray, i) || sum != sumColumn(intArray, i)) {
            return false;
        }
    }

    return true;
}

// ...
if (isMagicSquare(intArray)) {
    // ...
}
布尔isMagicSquare(int[][]intArray){
//检查对角线
int sum=对角线总和左向右(intArray);
如果(总和)=对角线总和右至左(内列)){
返回false;
}
//检查行和列
对于(int i=0;i<4;i++){
if(sum!=sumRow(intArray,i)| | sum!=sumrolumn(intArray,i)){
返回false;
}
}
返回true;
}
// ...
if(isMagicSquare(intArray)){
// ...
}

您可以将所有和放在一个数组中,并使用类似这样的函数来检查所有值是否相等:

public static boolean allElementsTheSame(int[] array) {
    if (array.length == 0) {
        return true;
    } else {
        int first = array[0];
        for (int element : array) {
            if (element != first) {
                return false;
            }
        }
        return true;
    }
}

到OP:allEquals中的
语法(称为varargs或变量参数)这可能是一次检查所有数字是否相等的最简洁的方法,但您在研究中可能还没有找到。它会自动从您传递的所有参数中创建一个数组。可能会提供一些有用的上下文。我还添加了另一种使用相同方法的方法“展开”一位,在一个助手方法中做检查。
public static boolean allElementsTheSame(int[] array) {
    if (array.length == 0) {
        return true;
    } else {
        int first = array[0];
        for (int element : array) {
            if (element != first) {
                return false;
            }
        }
        return true;
    }
}