これは新しいプログラマーに共通の問題であることがわかりますが、コードのソリューションを実装することに成功しませんでした。基本的に、wとvを分割します。これらはdouble変数に保存する必要があります。しかし、[0.0、0.0、...、0.0]を出力します
public static double density(int[] w, int[] v){
double d = 0;
for(L = 0; L < w.length; L++){
d = w[L] /v[L];
}
return d;
}
この行はここd = w[L] /v[L];
は数ステップにわたって行われます
d = (int)w[L] / (int)v[L]
d=(int)(w[L]/v[L]) //the integer result is calculated
d=(double)(int)(w[L]/v[L]) //the integer result is cast to double
つまり、doubleにキャストする前に精度がすでになくなっているため、最初にdoubleにキャストする必要があります。
d = ((double)w[L]) / (int)v[L];
これにより、Java整数演算を使用するのではなく、二重演算を使用して、最後にdoubleにキャストすることが強制されます。
Actaully w[L]/v[L]
ここでは両方とも整数であり、除算では精度が低下し、integer
値に変換され、後者はinteger
に変換されてdouble
に変換されます。
解決策は、オペランドまたは除数、あるいはその両方をダブルに変換することであり、除算操作は10進数値を生成します。
d = w[L]/(double)v[L];
次のように使用する
d = (double) w[L] /v[L];