Манипуляция Java BigInteger

Следующий код предназначен для отладки:

public static void main(String[] args) {
    BigInteger n = new BigInteger("10000000001");
    String sn = n.toString();
    char[] array = sn.toCharArray();
    //intend to change value of some char in array
    //not standard math operation
    BigInteger result = new BigInteger(array.toString());
}

Это дает мне ошибку:

    Exception in thread "main" java.lang.NumberFormatException: For input string: "[C@86c347"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Integer.parseInt(Integer.java:449)
        at java.math.BigInteger.<init>(BigInteger.java:316)
        at java.math.BigInteger.<init>(BigInteger.java:451)
        at debug.main(debug.java:14)

Но это работало нормально, до этого случая я не совсем уверен, что пошло не так.

1 ответ

Решение

Если есть сомнения, добавьте больше диагностики... выньте утверждения, которые делают две вещи. Это:

array.toString()

не будет делать то, что вы ожидаете, потому что массивы не переопределяют toString(), Это будет возвращать что-то вроде "[C@89ffb18", Вы можете увидеть это, извлекая дополнительную локальную переменную:

BigInteger n = new BigInteger("10000000001");
String sn = n.toString();
char[] array = sn.toCharArray();
String text = array.toString();
BigInteger result = new BigInteger(text);

Тогда в отладчике вы легко сможете увидеть значение text до звонка BigInteger - который показал бы проблему довольно ясно.

Чтобы преобразовать массив символов в строку, содержащую эти символы, вы хотите:

new String(array)
Другие вопросы по тегам