我是Java的新手,我遇到了以下问题。我需要按升序对整数数组进行排序,以便偶数数字在一半中,而奇数在另一半中。
所以,我有一个特殊的比较器:
static class EvenOddSort implements Comparator<Integer> {
@Override
public int compare(Integer x, Integer y) {
if (x == y) {
return 0;
}
if (y % 2 == 0) {
if (x < y) {
return -1;
} else {
return 1;
}
}
if (x % 2 == 0) {
if (x < y) {
return 1;
} else {
return -1;
}
}
return 0;
}
}
以下排序方法:
public Integer[] sortEvenOdd(Integer[] nums) {
EvenOddSort customSort = new EvenOddSort();
Arrays.sort(nums, customSort);
return nums;
}
我还有以下测试:
@Test
public void testSortEvenOdd1() {
Integer[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Integer[] expected = { 2, 4, 6, 8, 10, 1, 3, 5, 7, 9 };
assertArrayEquals(expected, tasks5.sortEvenOdd(nums));
}
我在openJDK6
上运行并在openJDK7
上成功时失败。
arrays first differed at element [0]; expected:<2> but was:<1> junit.framework.AssertionFailedError: arrays first differed at element [0]; expected:<2> but was:<1>
openJDK's
兼容吗?欢迎任何想法!
答案 0 :(得分:2)
你的整个比较器坏了,我一直看到更多的问题。
做这样的事情:
if (x%2 != y%2) {
if (x%2==0) {
return -1;
} else {
return 1;
}
} else {
return x.compareTo(y);
}
首先检查它们是否都不是奇数或两者都是偶数。如果它们不同,则根据奇数或偶数进行排序。
然后,如果它们都是奇数或两者都回退到标准的整数比较功能。