Манипуляция 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)