希望每个人都很好。
调用我创建的方法时出现此错误。我之所以创建该方法的原因是返回2个double值,所以我使用了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;
}
这是计算我希望存储在type2FS 2D数组中的2个double值的方法。
从函数返回的2个double值是集合的一部分。所以一组看起来像(4.5,5.5),现在一个决策树规则可以有多个集合,具体取决于规则。所以我认为存储它的最好方法是在2D数组中。
我无法理解我哪里出错了。 任何帮助将不胜感激。
谢谢
答案 0 :(得分:1)
type2FS[pos][pos]=calRight(grade.getDM(),grade.getDNU(),grade.getDNL(),Double.parseDouble(store.getData()[i][z]));
这意味着我的值是pos而j值是pos,那么你将分配特定的行和列值,然后是它的布尔值。
而不是那个
type2FS =calRight(grade.getDM(),grade.getDNU(),grade.getDNL(),Double.parseDouble(store.getData()[i][z]))
你可以这样打电话。
type2FS [pos]期待一个维度数组。因为你只提到了一行。
type2FS [pos] [[pos]期待Double值。因为你提到了行ans列。
答案 1 :(得分:1)
type2FS[pos][pos] = ...
正在尝试为单个&#34;单元格&#34;你的数组,所以它应该是一个double值。但是你要传递一个数组。
所以,改变
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]));
无论如何,&#34; [...]返回2个双倍值,所以我使用了2d数组&#34;没有意义,你也可以使用1d数组:
private Double[] calRight(double dm, double dnu, double dnl, double value) {
//other code
Double[] temp = {upperMg,lowerMg};
return temp;
}
即使这不是最好的解决方案。
答案 2 :(得分:1)
是的,为什么!错误 - '无法转换双[] []加倍“
type2FS[pos][pos]
是双重类型参考&amp; calRight(...)
返回double [] []。这是类型不匹配。
type2FS[pos][pos]=calRight(grade.getDM(),grade.getDNU(),grade.getDNL(),Double.parseDouble(store.getData()[i][z]));