猿问

整数迭代帮助java

我目前在将整数数组组合成整数时遇到问题。

我在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,它就会开始崩溃。有人有可能的解决方案吗?


烙印99
浏览 160回答 3
3回答

森林海

您正在溢出整数的最大大小 2147483647。解决此问题的一种方法是使用 aBigInteger而不是 a int:BigInteger bigInt = BigInteger.ZERO;for (int i : ints) {    bigInt = bigInt.multiply(BigInteger.TEN).add(BigInteger.valueOf(i));}

智慧大石

您可以像这样执行它: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("")));

哔哔one

public static long convert(int[] arr) {&nbsp; &nbsp; long res = 0;&nbsp; &nbsp; for (int digit : arr) {&nbsp; &nbsp; &nbsp; &nbsp; // negative value is marker of long overflow&nbsp; &nbsp; &nbsp; &nbsp; if (digit < 0 || res * 10 + digit < 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw new NumberFormatException();&nbsp; &nbsp; &nbsp; &nbsp; res = res * 10 + digit;&nbsp; &nbsp; }&nbsp; &nbsp; return res;}这不是一种通用方法,因为Long.MAX_VALUE. 否则,您必须使用长而BigInteger不是长。public static BigInteger convert(int[] arr) {&nbsp; &nbsp; // reserve required space for internal array&nbsp; &nbsp; StringBuilder buf = new StringBuilder(arr.length);&nbsp; &nbsp; for (int digit : arr)&nbsp; &nbsp; &nbsp; &nbsp; buf.append(digit);&nbsp; &nbsp; // create it only once&nbsp; &nbsp; return new BigInteger(buf.toString());}
随时随地看视频慕课网APP

相关分类

Java
我要回答