Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,通过长整数传递9位,发出增量和=0_Java_Arrays_Long Integer - Fatal编程技术网

在Java中,通过长整数传递9位,发出增量和=0

在Java中,通过长整数传递9位,发出增量和=0,java,arrays,long-integer,Java,Arrays,Long Integer,程序首先要求用户给出一个分配给变量n的值,然后提示用户提交长数字n次。然后,这些数字将存储到初始化的数组中(ar)。我试图创建的函数是循环数组中的数字,通过数组中的数字递增sum=0,以提供总和(Java) 然而,出于某种原因,除非我使用两个大于9位的连续数字,否则该程序可以工作 例如: aVeryBigSum(2[111111111])在数组中有n个2位数和两个9位数 输出: 2222222 aVeryBigSum(2[11111111111])在数组中有n个2和两个10位数字 输出: -20

程序首先要求用户给出一个分配给变量
n
的值,然后提示用户提交长数字n次。然后,这些数字将存储到初始化的数组中(
ar
)。我试图创建的函数是循环数组中的数字,通过数组中的数字递增
sum=0
,以提供总和(Java)

然而,出于某种原因,除非我使用两个大于9位的连续数字,否则该程序可以工作

例如:

aVeryBigSum(2[111111111])
在数组中有n个2位数和两个9位数

输出:

2222222

aVeryBigSum(2[11111111111])
在数组中有n个2和两个10位数字 输出:

-2072745074

知道问题是什么吗?我提供了以下程序:

import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Main {

    static long aVeryBigSum(int n, long[] ar) {
        int sum  = 0;
        for (int i = 0; i < n; i++){
          System.out.println(sum);
          System.out.println(ar[i]);
          sum += ar[i];
          System.out.println(" ");
        }
        return sum;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        long[] ar = new long[n];
        for(int ar_i = 0; ar_i < n; ar_i++){
            ar[ar_i] = in.nextLong();
        }
        long result = aVeryBigSum(n, ar);
        System.out.println(result);
    }
}
import java.text.*;
导入java.math.*;
导入java.util.regex.*;
公共班机{
静态long aVeryBigSum(int n,long[]ar){
整数和=0;
对于(int i=0;i
你的问题就在眼前

int sum  = 0;
应该是

long sum = 0;

当整数之和超过32位时,将触发整数溢出。

是的,同意Mad Physicast的说法。您必须使用
长和=0
。但是为了完全正确,您有可能使sum大于
Long.MAX\u值
。您可以使用例如
BigDecimal

static BigDecimal aVeryBigSum(int n, long[] ar) {
    BigDecimal sum = BigDecimal.ZERO;

    for (int i = 0; i < n; i++) {
        System.out.println(sum);
        System.out.println(ar[i]);

        sum = sum.add(new BigDecimal(ar[i]));

        System.out.println(" ");
    }

    return sum;
}
static BigDecimal aVeryBigSum(int n,long[]ar){
BigDecimal总和=BigDecimal.0;
对于(int i=0;i
或类似内容。@johnnymop。看起来更像是基本整数溢出。可能是@johnnymop的重复。代码中没有下一行。或者是以下两行之一:/