首页 文章

Java程序,以确定二维数组的矩阵中是否有任何重复行?

提问于
浏览
2

因此,正如 Headers 所说,我正在尝试组合一个程序,该程序将比较二维数组的行并确定是否有任何行相同 .

这必须分两部分完成;确定任何行是否相同并确定有多少行相同 . 我试图使用布尔方法来确定是否有任何相同的行和一个单独的方法来确定如果布尔方法返回true,有多少行是相同的 .

例如,如果数组是:

1 2 3
2 3 1
1 2 3

然后Boolean方法将返回true,输出将是:

The matrix has 2 identical rows.

问题是我不知道应该如何设置布尔方法;如果我能想出那么多,那么程序的其余部分很容易弄明白 .

如何为此设置布尔方法?

如果有人需要,这是我到目前为止提出的代码:

public class IdenticalRows {

    public static void main(String[] args) {
        Scanner KBin = new Scanner(System.in);
        char run;
        int ROW, COL;

        System.out.println("Would you like to begin? (Y/N)");
        run = KBin.next().charAt(0);
        do {
            if(run!='y' && run!='Y' && run!='n' && run!='N') {
                System.out.println("Please only type 'y' or 'Y' to begin or type 'n' or 'N' to close the program.");
                System.out.println("Would you like to begin? (Y/N)");
                run = KBin.next().charAt(0);
            }
        }while(run!='y' && run!='Y' && run!='n' && run!='N');

        do {
            System.out.println("Please enter the number of rows:");
            ROW = KBin.nextInt();
            do {
                if (ROW<=0) {
                    System.out.println("Entry invalid; must be a positive integer greater than 0.");
                    System.out.println("Please enter the number of rows:");
                    ROW = KBin.nextInt();
                }   
            }while(ROW<=0);
            System.out.println("Please enter the number of columns:");
            COL = KBin.nextInt();
            do {
                if (COL<=0) {
                    System.out.println("Entry invalid; must be a positive integer greater than 0.");
                    System.out.println("Please enter the number of columns:");
                    COL = KBin.nextInt();
                }   
            }while(COL<=0);

            int[][] testDuplicates = new int[ROW][COL];
                randArray (testDuplicates, MIN, MAX);
            System.out.println("Thematrix is:");
                printArray(testDuplicates);
                    System.out.println(" ");
            boolean presence = duplicates(testDuplicates);
                if (presence=true) {
                    countDuplicates(testDuplicates);
                }
                else if (presence=false) {
                    System.out.println("There are no identical rows in this matrix.");
                }
            System.out.println("Would you like to run the program again? (Y/N)");
            run = KBin.next().charAt(0);
        }while(run=='y' || run=='Y');
    }

    public static void randArray(int[][] matrix, int low, int up) {//Establishes the values of the elements of the array
        Random rand = new Random();
        for (int r = 0; r < matrix.length; r++) {
            for (int c = 0; c < matrix[r].length; c++) {
                matrix[r][c] = rand.nextInt(up-low+1)+low;
            }   
        }   
    }

    public static void printArray(int[][] matrix) {//Prints the elements of the array in a square matrix
        for (int r = 0; r < matrix.length; r++) {
            for (int c = 0; c < matrix[r].length; c++) {
                System.out.printf("%5d",matrix[r][c]);
            }
            System.out.println(" ");
        }
    }

    public static boolean duplicates(int[][] list) {//Determines if any row(s) of elements ever repeat
         for (int r=0; r<list.length; r++) {
             for (int c=0; c<list[r].length; c++) {

             }
         } 
         return false;
    }

    public static void countDuplicates(int[][] matrix) {
        for (int r=0; r<matrix.length; r++) {
            for (int c=0; c<matrix[r].length; c++) {

            }
        }
    }

    public static final int MAX=3;
    public static final int MIN=1;
}

提前感谢任何可以提供帮助的人!

1 回答

  • 2

    首先编写比较两行的方法:

    private static boolean areIdentical(int[] a1, int[] a2) {
        if(a1.length != a2.length) return false;
        for(int i = 0; i < a1.length; i++) {
            if(a1[i] != a2[i]) return false; 
        }
        return true;
    }
    

    现在您可以使用此方法来比较行 . 只需从数组中取出每一行,并将其与下面的每一行进行比较 . 像下一个:

    public static boolean duplicates(int[][] list) {
        for (int j = 0; j < list.length; j++) {
             if(j == list.length-1) return false; //don't need to compare last row
             for (int i = j + 1; i < list.length; i++) {
                 if(areIdentical(list[j], list[i])) return true;
             }
         } 
         return false;
    }
    

    您可以轻松修改此代码以计算重复项 .

相关问题