java - 从 python 到 Java 的 all 和 any 的替代方案?

标签 java

我正在尝试编写如何使用 Java 8 找出矩阵中行列式的代码。这项工作有一些特殊情况。例如,当矩阵是上三角矩阵时。我使用以下代码使用 Python 3.6 编写了这项工作:

def is_upper_triangular(a, order):
    for i in range(1, order):
        if all(a[i][j] == 0 for j in range(order)):
            return True
    return False

这是非常简单和干净的代码,所以我想过用 Java 进行编码,但我没有找到任何 Java 的“全部”方法来使用它。我在这个网页中找到了一些有关此问题的信息,并给出了否定的解决方案。有没有其他方法可以解决我的问题。 这是我现在的 java 代码:

public static double detMatrix(double[][] matriz) {
        if(matriz.length == 1)
            return matriz[0][0];
        if(matriz.length == 2)
            return matriz[0][0] * matriz[1][1] - matriz[1][0] * matriz[0][1];
        double det = 0;
        for(int i=0; i<matriz.length; i++){
            double[][] nm = new double[matriz.length-1][matriz.length-1];
            for(int j=0; j<matriz.length; j++){
                if(j != i){
                    for(int k=1; k<matriz.length; k++){
                    int indice = -1;
                    if(j<i)
                    indice = j;
                    else if(j>i)
                    indice = j - 1;
                    nm[indice][k-1] = matriz[j][k];
                    }
                }
            }
            if(i % 2 == 0)
                det += matriz[i][0] * detMatrix(nm);
            else
                det -= matriz[i][0] * detMatrix(nm);
        }
        return det;
    }

谢谢

最佳答案

我知道您要求 Java 中的特定关键字功能,但不同的编程语言提供不同的方法。

例如,为什么不简单地使用 Arrays.fill(...) 而不是 all 运算符呢?看起来像的Python

 for i in range(1, order):
     if all(a[i][j] == 0 for j in range(order))

看起来像

 for (int i = 0; i < a.length, i++) {
     Arrays.fill(a[i], i+1, a[i].length, 0);
 }

同样,Python 中的 any 操作可能看起来像是用更少的资源做更多的事情,但实际上它会崩溃为

 for (Element element : allElements() {
     if (element satisifies condition) {
         ... statements ...
     }
 }

使用 Java,上述循环可以工作,但它使效率低下变得明显。如果您确实不想看到代码在做什么,可以将其隐藏在方法中。

 public List<int> findFives(int[][] a) {
      ...
 } 

关于java - 从 python 到 Java 的 all 和 any 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44605704/

相关文章:

java - 在 Linux 上使用 Bundle-NativeCode 不起作用

java - 存储库连接 - 使用 SPARQL 查询无法进行回滚?

java - 您将如何拦截所有异常?

java - SQLException:找不到适合 jdbc 的驱动程序:mysql://localhost:3306/dbname

java - Spring Boot 安全 403 重定向

Java多线程空指针异常

java - 将 JSON 对象发布到 HTTP 服务器

java - 为什么 Collections.shuffle(List) 之后会出现空行?

java - 处理算法中的问题/错误的推荐方法

java - java列表的内存占用计算和GC计算