有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在MDiDimensional array(n<m)java中访问NDiDimensional array的索引

为了简化上下文,假设我们在Java中有一个2D数组,我们需要得到给定1D数组的索引。有没有更干净的方法来做同样的事情?我的数组的大小非常小(3 x 8),所以我设法使用for循环强制元素并获得索引,但是如果数组的大小足够大怎么办?出于我的目的,我使用了以下代码:

private int getIndex(double[][] centerArrayOriginal, double[] row){
        double[] currRow;
        int index = -1;
        for (int i=0; i<centerArrayOriginal.length;i++){
            currRow = centerArrayOriginal[i];
            if ((currRow[0] == row[0]) && (currRow[1] == row[1]) && (currRow[2] == row[2])){
                index = i;
            }
        }
        return index;
    }

显然,这不是最干净的方法,我尝试了使用ArrayListdouble[]元素并使用了.indexOf()方法,但它总是返回-1


共 (1) 个答案

  1. # 1 楼答案

    如果必须在数组中搜索给定的行,我看不到“暴力强制”的替代方法。但是,当您使用double数组时,应该注意,由于舍入错误,如果row1D数组来自例如计算结果,则行查找算法可能无法工作。只有当centerArrayOriginalrow的数据都由double个文本(常量)组成时,才应该假设可靠的结果

    无论如何,这里有一个解决方案,它使用两个嵌套for循环从任意大小的2D数组中查找行:

     private static int getIndex(double[][] centerArrayOriginal, double[] row) {
    
        for (int i = 0; i < centerArrayOriginal.length; i++) {
            double[] currRow = centerArrayOriginal[i];
    
            if (currRow.length != row.length) {
                throw new IllegalArgumentException(String.format(
                        "The size of the input row (%d) does not "
                                + "match the size of the rows in the array (%d)",
                        row.length, currRow.length));
            }
    
            boolean allElementsEqual = true;
    
            for (int j = 0; j < row.length; j++) {
                if (currRow[j] != row[j]) {
                    allElementsEqual = false;
                    break;
                }
            }
    
            if (allElementsEqual) {
                return i;
            }
        }
        return -1;
    }
    

    测试代码:

    double[][] data = new double[][] 
            {
                { 1.0d, 2.0d, 3.0d },
                { 4.0d, 5.0d, 6.0d },
                { 7.0d, 8.0d, 9.0d } 
            };
    double[] test = new double[] {4.0d, 5.0d, 6.0d};
    System.out.println(getIndex(data, test));
    

    打印出来

    1