-3

+= は異なる結果を生成します。以下のコードを参照してください... temp を含むコードは正しく動作しませんが、Java アプリを作成することでこれをデバッグできます。

public long JavaStopsAdding(int treeHeight) {

    long cars = 0;
    long cars1 = 0;
    int i = 0;
    while (treeHeight - i >= 0) {

        long temp = 0;

        if (treeHeight - i == 0 ) {
            cars += 1;
            cars1 += 1;
            break;
        }


       // working code start

           temp = (long) ((Math.pow(2,treeHeight- i))/2);
       cars1 += temp;
           System.out.print("temp " + (treeHeight- i) + " cars " + cars1 +"\n");
    // working code END

          // NON working code Start
            cars += ((Math.pow(2,treeHeight- i))/2);
    System.out.print("temp " + (treeHeight- i) + " cars " + cars + "\n");   
        // NON working code END
        i += 2;     
    }
    return cars;
}
4

3 に答える 3

4

おそらく += には何の問題もありません。代わりに、問題は値がオーバーフローしていることです。

を使用するべきではありませんMath.pow(2, n)。代わりに、1L << n高速であるだけでなく、動作する可能性が高いものを使用してください。いずれにせよ、n > 62 を持つことはできず、これが機能するとは期待できません。

于 2013-07-19T20:52:55.493 に答える
1

オーバーフローを引き起こす数学演算として BigInteger を使用します。

于 2013-07-19T21:14:45.450 に答える
-1

treeheight = 10 でコードをテストしたところ、すべて正常でした。コードには 2 つの変数 cars1 と cars が含まれています。

// working code start

temp = (long) ((Math.pow(2,treeHeight- i))/2);
cars1 += temp;
System.out.print("temp " + (treeHeight- i) + " cars " + cars1 +"\n");
// working code END

 // NON working code Start
        cars += ((Math.pow(2,treeHeight- i))/2);
System.out.print("temp " + (treeHeight- i) + " cars " + cars + "\n");   
    // NON working code END
于 2013-07-19T20:58:39.290 に答える