1

次のコード行が原因で、エラーが発生します。

int x = color(Integer.parseInt("ffffffde",16));

マイナス値だからかな

それを修正する理由、方法、または方法はありますか?

編集:

申し訳ありませんが、実際のエラーは含まれていません。ここにあります:

スレッド「アニメーション スレッド」java.lang.NumberFormatException での例外: 入力文字列の場合: java.lang.NumberFormatException.forInputString(不明なソース) で「ffffffde」、java.lang.Integer.parseInt(不明なソース) で

編集2:

値 ("ffffffde") は、次のコードによって作成されています。

Integer.toHexString(int_val);

編集 3: 既知のバグであることが判明しました (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4215269) 整数を 16 進文字列に変換できますが、負の数の場合は元に戻すことはできません!!

4

2 に答える 2

11

ffffffde整数の最大値より大きい

Java int は、-2,147,483,648 から 2,147,483,647 までの範囲の 32 ビット符号付きタイプです。

ffffffde = 4,294,967,262 

編集

Integer.toHexString(int_val)int を 16 進文字列に変換していました。そのメソッドのドキュメントから:

基数 16の符号なし整数として整数引数の文字列表現を返します。

しかしint署名されたタイプです。

使用する

int value = new BigInteger("ffffffde", 16).intValue();

負の値として戻します。

于 2012-05-21T07:52:40.860 に答える
5

このようなエラーが発生する場合は、

Exception in thread "main" java.lang.NumberFormatException: For input string: "ffffffde"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:461)
    at com.TestStatic.main(TestStatic.java:22)

次に、渡す値に問題があります。それはffffffdeです。これは、int に解析するための有効な 16 進値ではありません。

これを試してください

int x = Integer.parseInt("ffffde",16);
        System.out.println(x);

それはうまくいくはずです。

それ以上の16進値については、Longに解析する必要があります

Long x = Long.parseLong("ffffffde",16);
        System.out.println(x);

そして、これもうまくいくはずです

于 2012-05-21T07:56:16.680 に答える