希望大家都好。
我在调用我创建的方法时遇到了这个错误。我创建该方法的原因是返回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]));