なぜこれが機能するのですか:
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
どちらの方法も正常にコンパイルされますが、2 番目の方法を実行しようとすると、最初の列のすべてのデータが 0 になります。
どちらも同じ方法で呼び出されています。唯一の違いは、一方が引数から 1/10 の値を取得し、もう一方がハードコードされていることです (理想的ではありませんが、説明できない理由で動作させることができる唯一の方法です) )。
この問題は、数値 < 0 でパラメータ化されるのを好まないために発生していますか?