2

PHP スクリプトを Java に移行する際に問題が発生しています。私は高調波シリーズのセットで作業しています。私はPHPで動作していますが、Javaに変換すると終了しません(無限ループ)。何か案は?それともそれを成し遂げるためのより良い方法ですか?

PHP:

<?php

$current = 0;
$num = 2.5;

while($current < $num) {
    for($i = 1; $current < $num; $i++) {
        $current = $current + (1 / $i);
    }

    // this ($current) will return "2.5928571428571" (which it should)
    echo $current;
}

?>

Java (Java と同等ですが、ループを終了していません):

double current = 0;
double num = 2.5;
int i = 0;

while(current < num) {
    for(i = 1; current < num; i++) {
        current = current + (1 / i);
    }

    System.out.println(current);
}

それとも、私が完全に間違っているのかもしれません:o。

4

5 に答える 5

2

1/n=0 (n > 1) であるため、電流が 1 を超えることはありません。

いくつかのポイント:

  1. while ループを使用したり、for ループの外側で i を宣言したりする必要はありません。
  2. ダブルタイプを使う
于 2012-05-17T03:55:07.277 に答える
1

int 除算はおかしなことをするので、int ではなく double の数値を使用してください。

分数は int リテラルを使用し、int 除算は int を返す必要があります。あなたの場合、i > 1 の場合は 0 を返すことがよくあります。

つまり、

current = current + (1 / i); // will return current + 0 if i > 1

1 を 1.0 に変更して、分子を double リテラルにすることをお勧めします。

current = current + (1.0 / i);

これで、二重除算は、除算が行うべきと期待することを行います。

于 2012-05-17T03:56:03.250 に答える
0

問題は型キャストにあります。この場合、PHPは型を気にしないため、そこで機能します。

一方、Javaでは、doubleこれを機能させるために、部門の型を強制する必要があります。

double current = 0;
double num = 2.5;
int i = 0;

while(current < num) {
    for(i = 1; current < num; i++) {
        current += (1.0 / i); // Force the result to be a decimal with 1.0
    }
System.out.println(current);
}

iまたは、最初にを作成することもできますdouble

...
for(double i = 1.0; current < num; i+=1.0)
  current += 1.0/i;
于 2012-05-17T04:01:06.403 に答える
0

合計が問題であり、デバッグできるかどうかを確認するためだけに、中間変数を作成します。

double current = 0;
double num = 2.5;
double inc;

while(current < num) {
    for(int i = 1; current < num; i++) {
        inc = 1 / (double)i;
        current += inc;
    }
System.out.println(current);
}

問題が解決した場合、最終的なコードは次のようになります。

double current = 0;
double num = 2.5;

while(current < num) {
    for(int i = 1; current < num; i++) {
        current += (1 / (double)i);
    }
System.out.println(current);
}
于 2012-05-17T04:01:09.353 に答える
0

int/int = int (結果が .07 int が浮動小数点数を保持できないと仮定した場合、0 になります)

int/float = float (うまくいけばいいのですが)

于 2012-05-17T04:40:15.230 に答える