计算100000个整数的数组的逆运算,为什么会得到负输出? 导入java.io.File; 导入java.io.FileNotFoundException; 导入java.util.Scanner; 公共类反转计数器{ 公共静态void main(字符串[]args){ 扫描器=空; 试一试{ scanner=newscanner(新文件(“src/IntegerArray.txt”); }catch(filenotfounde异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } int[]nums=新int[100000]; int i=0; while(scanner.hasNextInt()){ nums[i++]=scanner.nextInt(); } System.out.println(countInversions(nums)); } 公共静态整数倒数(int[]nums){ 整数计数=0; 对于(int i=0;i

计算100000个整数的数组的逆运算,为什么会得到负输出? 导入java.io.File; 导入java.io.FileNotFoundException; 导入java.util.Scanner; 公共类反转计数器{ 公共静态void main(字符串[]args){ 扫描器=空; 试一试{ scanner=newscanner(新文件(“src/IntegerArray.txt”); }catch(filenotfounde异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } int[]nums=新int[100000]; int i=0; while(scanner.hasNextInt()){ nums[i++]=scanner.nextInt(); } System.out.println(countInversions(nums)); } 公共静态整数倒数(int[]nums){ 整数计数=0; 对于(int i=0;i,java,largenumber,Java,Largenumber,一个int的最大值是2147483647-你看到的是溢出。如果你期望它这么大,你应该让计数a长 来源:这里最糟糕的情况是4999950000个倒数,它比int的最大值(2147483647)大。您可能应该使用long来存储该数字。我怀疑结果太大,是一个正数,因此Java将其转换为负数我怀疑您应该使用long而不是int。重复递增计数几乎不可能使8字节的长度溢出。正如您所怀疑的,存在溢出。尝试使用bigInteger可能根本不影响值,但使用continue的else块似乎不必要。 import j

一个
int
的最大值是2147483647-你看到的是溢出。如果你期望它这么大,你应该让
计数
a


来源:

这里最糟糕的情况是4999950000个倒数,它比int的最大值(2147483647)大。您可能应该使用long来存储该数字。

我怀疑结果太大,是一个正数,因此Java将其转换为负数我怀疑您应该使用
long
而不是
int
。重复递增计数几乎不可能使8字节的长度溢出。正如您所怀疑的,存在溢出。尝试使用bigInteger可能根本不影响值,但使用continue的else块似乎不必要。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class InversionCounter {
    public static void main(String[] args) {
        Scanner scanner = null;
        try {
            scanner = new Scanner(new File("src/IntegerArray.txt"));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        int [] nums = new int [100000];
        int i = 0;
        while(scanner.hasNextInt()){
           nums[i++] = scanner.nextInt();
        }
        System.out.println(countInversions(nums));

    }

public static int countInversions(int[] nums) {
    int count = 0;
    for (int i=0;i<nums.length-1;i++) {
        for (int j=i+1;j<nums.length;j++) {
            if (nums[i]>nums[j]) {
                count++;
            }
            else {continue;}
        }
    }
    return count;
}

}