为什么会这样:
public static double[][] param(double[][] data){
for (int i=0;i<data.length;i++){
for (int j=0;j<data[0].length;j++){
if(j!=1){
data[i][j] = data[i][j] * 1/10;//for some reason didn't accept as argument
}
System.out.println(data[i][j]);
}
}
return data;
}
具有以下输出:
13581.0 337.42900390625 13571.0 337.1949951171875 13561.0 336.59599609375 13541.0 336.356005859375 13531.0 336.072998046875 13521.0 335.7989990234375 13511.0 335.5219970703125 13501.0
但这不是:
public static double[][] param(double[][] data, double param){
for (int i=0;i<data.length;i++){
for (int j=0;j<data[0].length;j++){
if(j!=1){
data[i][j] = data[i][j] * param;
}
System.out.println(data[i][j]);
}
}
return data;
}
使用以下(不正确的)输出。
13581.0 0.0 13571.0 0.0 13561.0 0.0 13541.0 0.0 13531.0 0.0 13521.0 0.0 13511.0 0.0 13501.0
两种方法都编译得很好,但是当我尝试运行第二种方法时,它会使第一列中的所有数据 = 0。
它们都以相同的方式被调用,唯一的区别是一个从参数中获取 1/10 值,另一个是硬编码的(不理想,但这是我可以让它工作的唯一方法,因为一些莫名其妙的原因)。
这个问题的发生是因为它不喜欢被数字 < 0 参数化吗?