如何在超过限制时打印Java int值

dam*_*mon 2 java int overflow

在我的排序程序的Java代码中(使用我的insertionsort算法实现对100000个整数进行排序),我试图找出数组中元素的交换次数.我将其设置为静态变量,因为sort()方法是静态的.

但是,在程序运行期间的某个时候,我认为整数限制被越过,最终计数显示为负数.必须有办法纠正这个并得到数字正确的数字,但我无法弄明白这一点.你可以帮忙吗?

public class InsertionSort {
    private static int exchcount=0;

    public static void exch(Comparable[] a, int i,int j){
        Comparable temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
    public static int exchangeCount(){
        return exchcount;
    }

    public static void sort(Comparable[] a){
    int N = a.length;       

    for(int i=0; i< N;i++){
        for(int j=i; j>0 && less(a[j],a[j-1]); j--){
        exch(a,j,j-1);
        exchcount++;

        }
       }
   }
...

    public static void main(String[] args) {
        Integer[] a = RandomNumberArrayGenerator.generate(100000);
        sort(a);
        System.out.println("number of exchanges="+ exchangeCount());
   }
Run Code Online (Sandbox Code Playgroud)

这给了

number of exchanges= -1799089211
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 5

最简单的是将计数器变为a long而不是int.这将使您最多可以计算9,223,372,036,854,775,807.

如果每个exch()CPU占用一个CPU周期,则在3GHz计算机上需要大约100年才能使long计数器溢出.