【问题标题】:How to know if two matrices have the same size [Java]如何知道两个矩阵是否具有相同的大小 [Java]
【发布时间】:2021-12-22 07:38:12
【问题描述】:

我是一名刚开始学习递归编程的新程序员。我正在尝试递归比较矩阵的大小。

public static boolean mismasFilas(int[][] m1, int[][] m2, int fila) {
    boolean sol = true;
    int k = 0, h = 0;
    if (fila >= 0) {
        if (m1[fila].length != m2[fila].length) {
            
            return false;
        } else {
            mismasFilas(m1, m2, fila - 1);
        }
    }
    return sol;
}

到目前为止它工作得很好,但是 return false; 语句没有按预期工作,它没有退出该方法。我究竟做错了什么?感谢您的帮助。

【问题讨论】:

  • “相同尺寸”是指“相同尺寸”吗?如果您只处理 2 个级别,为什么还要使用递归?一个简单的第二级循环就足够了:if(m1.length!=m2.length) {return false;} for(int i = 0; i < m1.length; i++) { if(m1[i].length != m2[i].length) { return false; }} return true;
  • 请注意,在else 块中,您正在执行递归调用,但您忽略了mismasFilas 方法的返回值。

标签: java recursion


【解决方案1】:

如果您想检查二维arrays 是否为矩形矩阵并且两者具有相同的维度,您可以这样做:

public static boolean isRectangle2DArray(int[][] array) {
    return Arrays.stream(array).mapToInt(row -> row.length).distinct().count() == 1;
}

public static boolean sameDimensions(int[][] m1, int[][] m2) {
    return isRectangle2DArray(m1) && isRectangle2DArray(m2) 
            && m1.length == m2.length && m1[0].length == m2[0].length;
}

如果您不想检查二维 arrays 是否为矩形,您可以这样做:

public static boolean sameDimensions(int[][] m1, int[][] m2) {
    if (m1.length != m2.length) {
        return false;
    }
    for (int i = 0; i < m1.length; i++) {
        if (m1[i].length != m2[i].length) {
            return false;
        }
    }
    return true;
}

如果你可以使用stream,你也可以这样做:

public static boolean sameDimensions(int[][] m1, int[][] m2) {
    return m1.length == m2.length && 
            IntStream.range(0, m1.length)
                    .allMatch(i -> m1[i].length == m2[i].length);
}

然后:

int[][] m1 = {{1, 2, 3}, {4, 5, 6}};

int[][] m2 = {{7, 8, 9}, {10, 11, 12}};

int[][] m3 = {{7, 8}, {9, 10}, {11, 12}};

System.out.println("(m1, m2): " + sameDimensions(m1, m2));
    
System.out.println("(m1, m3): " + sameDimensions(m1, m3));

输出:

(m1, m2): true
(m1, m3): false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 2015-03-02
    相关资源
    最近更新 更多