我目前在将整数数组组合成整数方面遇到问题。
在Way to combine integer array to a single integer variable?,我研究了几种其他方法来实现它们,但我仍然不明白为什么会遇到错误。
我的目标是转向:
[6, 2, 3, 3, 8, 7, 7, 7, 0, 1, 6]
进入
62338777016
当前可用于较小的整数数组,例如:
[1, 3, 4, 4]
-> 1344
一旦元素数量达到10,它就会开始崩溃。 有人有可能解决的办法吗?
答案 0 :(得分:0)
我们需要确保看到错误消息,但是我的第一个猜测是您达到int(2,147,483,647)的大小限制。
答案 1 :(得分:0)
您正在溢出整数的最大大小2147483647。解决此问题的一种方法是使用BigInteger
而不是int
:
BigInteger bigInt = BigInteger.ZERO;
for (int i : ints) {
bigInt = bigInt.multiply(BigInteger.TEN).add(BigInteger.valueOf(i));
}
答案 2 :(得分:0)
一种解决此问题的可能方法,我假设所有整数都是正数。
您可以将所有整数数组值连接成一个String并形成一个字符串。
因此,[6, 2, 3, 3, 8, 7, 7, 7, 0, 1, 6]
变为62338777016
(字符串)。
BigInteger具有构造函数(https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#BigInteger(java.lang.String))
您可以利用它来获取值的BigInteger表示形式。
答案 3 :(得分:0)
您可以这样执行:
Integer[] arr = {6, 2, 3, 3, 8, 7, 7, 7, 0, 1, 6};
Long val = Long.valueOf(Arrays.stream(arr).map(String::valueOf).collect(Collectors.joining("")));
答案 4 :(得分:0)
在这里,您尝试使用超过10位数字的整数,该数字超过了最大值2,147,483,647,因此您可以使用下面的代码进行细微的更改,例如使用双精度。
Integer[] arr = new Integer[] { 6, 2, 3, 3, 8, 7, 7, 7, 0, 1, 6 };
Double myData = 0d;
for (int i = 0; i < arr.length; i++) {
double productfactor = (Math.pow(10, (arr.length-1-i)));
myData = myData+arr[i]*productfactor;
}
String formatted = new BigDecimal(Double.valueOf(myData)).toString();
答案 5 :(得分:0)
public static long convert(int[] arr) {
long res = 0;
for (int digit : arr) {
// negative value is marker of long overflow
if (digit < 0 || res * 10 + digit < 0)
throw new NumberFormatException();
res = res * 10 + digit;
}
return res;
}
由于Long.MAX_VALUE
,这不是通用方法。否则,您必须使用BigInteger
个istead of long。
public static BigInteger convert(int[] arr) {
// reserve required space for internal array
StringBuilder buf = new StringBuilder(arr.length);
for (int digit : arr)
buf.append(digit);
// create it only once
return new BigInteger(buf.toString());
}