繁体   English   中英

Java数组/逆向新手

[英]Java array/inverse novice

我是Java语言的新手,我有一个必须解决的问题,我很确定自己做对了,但测试仪仍然崩溃。

如果必须做的简短摘要是“在数组a中,求反是数组中同时满足i <j和a [i]> a [j]的一对位置i和j。在组合中,数组内的反转计数可以粗略地衡量该数组的“乱序”。如果数组按升序排序,则其反转数为零,而按逆序排序的n元素数组的n(n-1 )/ 2倒数,这是可能的最大数目。此方法应计算给定数组arr内的倒数,然后返回该计数“

这是我做过的/尝试过的


import java.util.Arrays;

public class P2J1
{
public static int countInversions(int[] arr)
{ 
    int inversions = 0; 
    for (int i = 0; i <= arr.length; i++){
        for (int j = i+1; j < i; j++){
           if (arr[i] > arr[j]){
               inversions++; 
           } 
       } 
   } 
  return inversions; 
} 
}

/// here's the tester 

    @Test public void testCountInversions() {
        Random rng = new Random(SEED);
        CRC32 check = new CRC32();
        for(int i = 0; i < 1000; i++) {
            int[] a = new int[i];
            for(int j = 0; j < i; j++) {
                a[j] = rng.nextInt(100000);
            }
            check.update(P2J1.countInversions(a));
        }
        assertEquals(1579619806L, check.getValue());
    }

在Java中,数组索引从0arr.length - 1 ,您需要将代码中的i <= arr.length更改为i < arr.length 否则,您将获得ArrayIndexOutofBoundsException

@khelwood的建议也是正确的。 (int j = i+1; j < i; j++)更改为(int j = i+1; j < arr.length; j++)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM