0

単純なJavaクラップスゲームを作成した後、100万回の反復をテストすることにしました。何らかの理由で、このコードで2つの数値を除算します

System.out.println("Wins: "+w+" Losses: "+l);
double avg = 100*(w / l);
System.out.println("Average: "+avg);

これは、何らかの理由で勝ち負けの正しい数を出力しますが、分割すると0.0になります。助けていただければ幸いです。

解決されたコード:

    double w = 0 , l = 0;
    for(int c=1;c<1000000;c++)
    {
    if(playGame() == true)
    {
        System.out.println("You win!");
        w++;
    }
    else
    {
        System.out.println("You lost!");
        l++;
    }
    }
    System.out.println("Wins: "+w+" Losses: "+l);
    double avg = (100*(w / l))/2;
    System.out.println("Average: "+avg);
4

5 に答える 5

0

あなたのwandlは ints かもしれないと思います。intを除算すると、doubleに評価されず、intに評価され、常に切り捨てられます

それが実際に当てはまる場合、2つのオプションがあります

  • w入力中にlダブルスを取る
  • wldouble に キャストしてから、演算を実行してください。

試す:

double dWin = w;
double dLoss = l

System.out.println("Wins: "+dWin+" Losses: "+dLoss);
double avg = 100*(dWin / l);
System.out.println("Average: "+avg);
于 2012-09-12T16:21:36.813 に答える
0

w と l が ints であると仮定すると、整数演算を行います。分子が分母よりも大きくない限り、整数除算はゼロを返します。

于 2012-09-12T16:21:42.957 に答える
0

入力が int の場合、出力は int になります。入力の一方または両方が float または double である必要があります。

それらがintであり、それらをfloatに変更できない場合は、行うことができます

double avg = 100*(w / (l * 1d));

結果が double になるように la double を作成します。

*100d がなければ、int 値を double の中に入れています。

于 2012-09-12T16:21:59.190 に答える
0

他の誰もが掛け算と割り算の連想規則を忘れています

double avg = 100.0 * w / l;

あなたに正しい答えを与え、見苦しいキャストを避けます:-)

于 2012-09-12T16:39:54.423 に答える
0

演算の結果は最大のオペランド タイプです。したがって、/演算を 2 つに適用するintと、答えは になりますint

精度のある平均が必要な場合は、オペランドの 1 つを double に型キャストする必要があります。

書いてみてください

double avg = 100*(((double)w) / l);
于 2012-09-12T16:23:45.680 に答える