[英]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中,数组索引从0
到arr.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.