5

次のような行があります

if(numb2 < 10000000000000 & numb2 > 100000000000){

したがって、Eclipse では、10000000000000 と 100000000000 はどちらも整数リテラルの範囲外です。具体的には

int 型のリテラル 10000000000000 は範囲外です int 型のリテラル 1000000000000 は範囲外です

次のように行を変更しました

if(numb2 < 1000000000*10000 & numb2 > 100000000*1000){

しかし、その範囲の数字を入力すると、

Exception in thread "main" java.lang.NumberFormatException: For input string: "5555555555555"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at twothousandthirteen.LuckyNumber.main(LuckyNumber.java:12)

リテラル番号の範囲を拡張する方法があるかどうか、または問題を解決するために何かを行う方法があるかどうかを知りたいです。

ありがとうございます

4

5 に答える 5

4

これらの数値は、定数として使用できる最大int値 2 31Integer.MAX_VALUE -1 または 2147483647 よりも大きくなります。

そのままコーディングできた理由1000000000*10000は、各被乗数は最大int値の範囲内ですが、結果はそうではなく、Java は結果をオーバーフローさせることでこれを処理するため、有効な範囲内に収まります。

この問題を解決するには、数値 (Java のデフォルトの数値型は ) の場合は変数long(64 ビット) と定数を最後に追加して長くし、入力のより大きな値に対応するために使用する必要があります。LintLong.parseLong()

のようintに、 の範囲longも 2 63 -1 または 9223372036854775807 に制限されていることに注意してください。これは定数として使用できますLong.MAX_VALUE

任意の大きな数の場合は、BigIntegerクラスを使用します。

于 2013-03-25T19:57:19.397 に答える
0

longリテラルを指定する必要があります。

if(numb2 < 10000000000000L && numb2 > 100000000000L){

... および Long.parseLong を使用して、int-2,147,483,648 ~ 2,147,483,647 の範囲外の整数を解析します。

Long.parseLong(input)

もちろん、どちらのリテラルも範囲をはるかに超えることを意図しているintため、numb2が の場合int、その範囲をテストしても意味がありません。

また、ブール値の and には、 を使用せずに を使用&します&&&はビットごとの and 演算子であり、おそらくあなたがしようとしていることではありません。&&論理「and」です。

于 2013-03-25T19:45:03.393 に答える
0

Java のプリミティブ値の範囲については、http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html を参照してください

これらは、対応するラッパー クラスから静的変数としても利用できます。たとえば、Integer.MAX_VALUE

于 2013-03-25T19:45:27.580 に答える
0

のデータ型はnumb2何ですか? ですかint?もしそうなら、チェックする必要はありません -intいずれにせよ ~2,000,000,000 を超える数値を格納することはできません。条件は常に true です。

一方、 の場合longは、必要なのはlongリテラルだけです。それは次のようになります。

if(numb2 < 10000000000000L & numb2 > 100000000000L){ 
于 2013-03-25T19:46:20.723 に答える
0

int の範囲外の数値を使用する場合は、別の型を使用する必要があります。Eclipse の整数値は 2^31-1 (符号付き) までしかありません。より大きな値を使用する場合は、longs を 2^63-1 まで上げることができます。

それよりも大きな数値が必要な場合、double は非常に大きくなる可能性がありますが、精度が非常に悪いため、精度が必要な場合は使用しないでください。巨大な値のもう 1 つの方法は、BigIntegerクラスを使用することですが、これでは処理が難しいオブジェクトが作成されます。

于 2013-03-25T19:48:01.230 に答える