调用二维数组函数“无法将 Double[][] 转换为 Double”错误

Calling 2D Array Function ''Cannot Convert Double[][] To Double" Error

希望大家都好

调用我创建的方法时出现此错误。我之所以创建该方法是为了 return 2 个双精度值,所以我使用了一个二维数组。这是我的相关代码:

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

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

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

我在“=”符号后的部分收到错误消息 "Type mismatch: cannot convert from Double[][] to Double"。 传递了4个double变量。

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;
}

这是计算我希望存储在 type2FS 二维数组中的 2 个双精度值的方法。

从函数 return 编辑的 2 个双精度值是一个集合的一部分。所以一组看起来像 (4.5,5.5),现在一个决策树规则可以有很多组,具体取决于规则。所以我认为最好的存储方式是在二维数组中。

我不明白我哪里出错了。 任何帮助将不胜感激。

谢谢

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 值。因为你提到的是行和列。

type2FS[pos][pos] = ...

正在尝试为数组的单个 "cell" 分配一个值,因此它应该是一个双精度值。但是你传递的是一个数组。

所以,改变

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]));

无论如何,“[...] 到 return 2 个双精度值,所以我使用了二维数组”没有意义,您可以使用一维数组:

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

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

Error - 'Cannot Convert Double[][] To Double"

对呀,为什么! type2FS[pos][pos] 是 double 类型引用 & calRight(...) returns double[][]。是类型不匹配。

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