整数迭代帮助Java

时间:2018-12-10 06:16:33

标签: java arrays concatenation

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

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

6 个答案:

答案 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());
}