سؤال

وأثناء كتابة لعبة للJ2ME هربنا الى قضية استخدام java.lang.Integer.parseInt ()

لدينا العديد من القيم الثابتة التي تعرف بأنها القيم عرافة، على سبيل المثال:

CHARACTER_RED = 0xFFAAA005;

وخلال المباراة كانت القيمة المتسلسلة وحصل من خلال شبكة اتصال، وجاء فى وتمثيل سلسلة من قيمة ست عشرية. من أجل تحليل إعادته إلى int حاولنا unsuccesfully ما يلي:

// Response contains the value "ffAAA005" for "characterId"
string hexValue = response.get("characterId");
// The following throws a NumberFormatException
int value = Integer.parseInt(hexValue, 16);

وثم ركضت بعض الاختبارات، وحاول هذا:

string hexValue = Integer.toHexString(0xFFAAA005);
// The following throws a NumberFormatException
int value = Integer.parseInt(hexValue, 16);

وهذا هو الاستثناء من الرمز الفعلي:

java.lang.NumberFormatException: ffaaa005
    at java.lang.Integer.parseInt(Integer.java:462)
    at net.triadgames.acertijo.GameMIDlet.startMIDlet(GameMIDlet.java:109)

وهذا يجب أن أعترف، حيرة لي. تبحث في قانون parseInt وNumberFormatException ويبدو أن ألقيت فيه عدد يجري تحليل "الصلبان" و "سلبي / الحدود الإيجابي" (ربما شخص ما يمكن تحرير في المصطلحات المناسبة لهذا؟).

هل هذا هو السلوك المتوقع لوظيفة Integer.parseInt؟ في النهاية اضطررت لكتابة بلدي سلسلة عرافة وظيفة التوزيع، وكنت مستاء جدا مع تنفيذ المقدمة.

وبعبارة أخرى، كان توقعي وجود Integer.parseInt) العمل (على تمثيل سلسلة عرافة عدد صحيح مضللة؟

وتحرير: في مشاركتي الأولي كتبت 0xFFFAAA005 بدلا من 0xFFAAA005. لقد منذ تصحيح هذا الخطأ.

هل كانت مفيدة؟

المحلول

ووString كنت تحليل كبير جدا لتناسب في int. في جاوة، وint هو نوع البيانات الموقعة، 32-بت. سلسلة الخاص بك يتطلب 36 بت على الأقل.


ولديك قيمة (إيجابية) لا تزال كبيرة جدا لاحتوائه في قعت 32 بت int.

نصائح أخرى

هل تدرك أن الإدخال (4289372165) تجاوزات الحد الأقصى لحجم وint (2147483647)؟

وحاول تحليل القيمة باعتباره long وتقليم "0x" الرائدة قبالة سلسلة قبل تحليل ما يلي:

public class Program {
    public static void main(String[] args) {
        String input = "0xFFFAAA005";
        long value = Long.parseLong(input.substring(2), 16);
        System.out.print(value);
    }
}

وأنا لست ديف جافا، ولكن كنت اعتقد parseInt يعمل فقط مع أعداد صحيحة. 0xFFFAAA005 ديه 9 أرقام عرافة، حتى انها طويلة، وليس عدد صحيح. تخميني هو انها تشكو لأنك طلبت منها تحليل عدد هذا أكبر من كل شيء نوع البيانات نتيجة.

ورقمك يبدو أن تكون كبيرة جدا لاحتوائه في عدد صحيح، حاول استخدام Long.parseLong () بدلا من ذلك. أيضا، لا يبدو أن سلسلة للحصول على تحليل إذا كان لديك 0X في سلسلة الخاص بك، وذلك في محاولة لخفض هذا الخروج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top