调用 2D 数组函数无法将双精度 [][] 转换为双精度"错误



希望大家都好。

我在调用我创建的方法时遇到了这个错误。我创建该方法的原因是返回2个双值,所以我使用了一个2d数组。这是我的相关代码:

Double[][] type2FS;
type2FS = new Double[rule.getRules().get(x).getAttributes().size()][rule.getRules().get(x).getAttributes().size()];
int pos=0;

2d数组是决策树规则中属性数量的大小,规则存储在ArrayList中。

type2FS[pos][pos]=calRight(grade.getDM(),grade.getDNU(),grade.getDNL(),Double.parseDouble(store.getData()[i][z]));
pos++;
break;

我在'='符号后的部分中得到错误,并显示消息"类型不匹配:无法从Double[][]转换为Double"。传递了4个双变量。

private Double[][] calRight(double dm, double dnu, double dnl, double value) 
    {
    double upperMg= (value-dnl) / (dnu-dnl);
    double lowerMg= 1 - upperMg;
    if(upperMg>1.0)
    {
        upperMg=1.0;    
    }
    else if (upperMg<0.0)
    {
        upperMg=0.0;
    }
    if(lowerMg>1.0)
    {
        lowerMg=1.0;
    }
    else if(lowerMg<0.0)
    {
        lowerMg=0.0;
    }
    Double[][] temp = {{upperMg},{lowerMg}};
    return temp;
}

这是一种计算我希望存储在type2FS2D数组中的2个双值的方法。

从函数返回的2个双值是一个集合的一部分。因此,一个集合看起来像(4.5,5.5(,现在一个决策树规则可以有许多集合,这取决于该规则。所以我认为最好的存储方式是在2D阵列中。

我不明白我哪里错了。如有任何帮助,我们将不胜感激。

感谢

type2FS[pos][pos] = ...

正在尝试将一个值附加到数组的单个"单元格",因此它应该是一个双值。但你却在传递一个数组。

所以,改变

type2FS[pos][pos]=calRight(grade.getDM(),grade.getDNU(),grade.getDNL(),Double.parseDouble(store.getData()[i][z]));

type2FS=calRight(grade.getDM(),grade.getDNU(),grade.getDNL(),Double.parseDouble(store.getData()[i][z]));

无论如何,">[…]返回2个双值,所以我使用了2d数组"没有意义,你也可以使用1d数组:

private Double[] calRight(double dm, double dnu, double dnl, double value) {
    //other code
    Double[] temp = {upperMg,lowerMg};
    return temp;
}

尽管这不是最好的解决方案。

type2FS[pos][pos]=calRight(grade.getDM(),grade.getDNU(),grade.getDNL(),Double.parseDouble(store.getData()[i][z]));

这意味着i的值是pos,j的值是pos,然后你要分配特定的行和列的值,然后是它的布尔值。

而不是

type2FS =calRight(grade.getDM(),grade.getDNU(),grade.getDNL(),Double.parseDouble(store.getData()[i][z]))

你可以那样打电话。

type2FS[pos]需要一维数组。因为你只提到了一排。

type2FS[pos][[pos]应为Double值。因为你提到的是行和列。

错误-"无法将Double[][]转换为Double">

是的,为什么!CCD_ 1是双类型引用&calRight(...)返回double[][]。这是类型不匹配。

type2FS[pos][pos]=calRight(grade.getDM(),grade.getDNU(),grade.getDNL(),Double.parseDouble(store.getData()[i][z]));

最新更新