私の質問を公式化する方法は本当にわかりませんが、悪い試みです。 私がやりたいことは、基本的にuserinputのサインをdouble値で置き換えることです。リプレイスプロセスは今のところ関連性がありません。私の問題はリプレイスメントを計算する際に発生します。例えば負の数と正の数を持つ数字の行を想像してみてください。 -5から5まで(maxX
は10となります)。 私の必要とされる置換の間のステップ幅としてscale
を想像してください。だから私が計算する必要がある置換は:-5.0, -4.8, -4.6, -4.4, [...], 4.4, 4.6, 4.8, 5.0
(原因:n/scale = 0/5, 1/5, 2/5 [...]
)です。 (単に計算のため) はHERESに私のコード:数字の行で正と負の値を計算する
int maxX = 10;
int scale = 5;
public void rep(){
double rep = 0;
int n = 0;
for (int k = (-maxX/2)*scale; k <= (maxX/2)*scale; k++){
if (k < 0){
rep = (double) n/scale +((int) ((k)/scale));
System.out.println("k: "+k+" "+rep);
}
if (k >= 0){
rep = (double) n/scale +((int) ((k)/scale));
System.out.println("k: "+k+" "+rep);
}
if (n < scale-1){
n++;
} else {
n = 0;
}
}
}
それはk => 0
の結果は、要件に合わせ、正常に動作しますが、彼らは間違っているのでk < 0
の結果unfourtunatley私のニーズをsatifyません(コンソールoutprint ):そうk < 0
ための出力が-5.0, -4.8, -4.6, -4.4, [...]
にマッチします変更するにはどう
k: -25 -5.0 // correct
k: -24 -3.8 // wrong
k: -23 -3.6 // wrong
k: -22 -3.4 // wrong
k: -21 -3.2 // wrong
k: -20 -4.0 // correct
k: -19 -2.8
k: -18 -2.6
k: -17 -2.4
k: -16 -2.2
k: -15 -3.0
k: -14 -1.8
k: -13 -1.6
k: -12 -1.4
k: -11 -1.2
k: -10 -2.0
k: -9 -0.8
k: -8 -0.6
k: -7 -0.4
k: -6 -0.19999999999999996
k: -5 -1.0
k: -4 0.2
k: -3 0.4
k: -2 0.6
k: -1 0.8
k: 0 0.0
k: 1 0.2
k: 2 0.4
k: 3 0.6
k: 4 0.8
k: 5 1.0
k: 6 1.2
k: 7 1.4
k: 8 1.6
k: 9 1.8
k: 10 2.0
k: 11 2.2
k: 12 2.4
k: 13 2.6
k: 14 2.8
k: 15 3.0
k: 16 3.2
k: 17 3.4
k: 18 3.6
k: 19 3.8
k: 20 4.0
k: 21 4.2
k: 22 4.4
k: 23 4.6
k: 24 4.8
k: 25 5.0
、私はそれのまわりで私の頭をラップ傾けます。ありがとうございました。
あなたのすべての整数は順不同です。独自のコードを実行すると、その理由がわかります。 –
問題は整数計算を使用しているため、すべての結果が切り捨てられることです。 -24/5は-4に切り捨てられ、0.2を加えると-3.8となります。とにかくそれをどうして計算するのですか?最大値に達するまで、各繰り返しでステップサイズを追加するだけではどうですか? for(double v = -maxX/2; v <= maxX/2; v + = 1.0/scale)のようなもの{System.out.println(v); } ' – Thomas
さて、わかりました、それは理にかなっています。 -25 <= k <-20の場合、この計算の整数値を-5にする必要があるため、修正しました。 – Zi1mann