web-dev-qa-db-ja.com

javaでlong []配列を宣言しています

なぜ私がこのように配列を宣言できないのか誰にも教えてもらえますか?

_long[] powers = { 0, 0, 1, 7, 35, 155, 651, 2667, 10795, 43435,
                174251, 698027, 2794155, 11180715, 44731051, 178940587,
                715795115, 2863245995, 11453115051, 45812722347, 183251413675,
                733006703275, 2932028910251, 11728119835307, 46912487729835,
                187649967696555, 750599904340651, 3002399684471467};
_

コンパイラーは、int型のリテラルが範囲外であると言います。私もこのように長くキャストしてみました

_long[] powers = { 0, 0, 1, 7, 35, 155, 651, 2667, 10795, 43435,
                174251, 698027, 2794155, 11180715, 44731051, 178940587,
                715795115, (long)2863245995, (long)11453115051, (long)45812722347, etc ...
_

しかし、何も変更されず、このようなLong.valueOf(x)を試してみました。ここで、xはコンパイラに問題がある数です。

何か案は?

前もって感謝します

12
Yetti

プレーン番号はJavaではintと見なされます。 Lを変換するには、Integer.MAX_VALUEより大きいlongを追加します。

long[] powers = {..., 2863245995L, 11453115051L, ...};

docs によると

整数リテラルは、ASCII文字Lまたはl(エル)が接尾辞として付いている場合はlong型です。それ以外の場合はint型です。

文字l(エル)は、数字の1(1)と区別できないことが多いため、接尾辞Lが推奨されます。

26
Masudul

このようなことを試しましたか?

long[] powers = { 0, 0, 1, 7, 35, 155, 651, 2667, 10795, 43435,
            174251, 698027, 2794155, 11180715, 44731051, 178940587,
            715795115L, 2863245995L, 11453115051L, 45812722347L, 183251413675L,
            733006703275L, 2932028910251L, 11728119835307L, 46912487729835L,
            187649967696555L, 750599904340651L, 3002399684471467L};
4
quasit