Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 奇偶排序不相容性_Java_Sorting_Openjdk - Fatal编程技术网

Java 奇偶排序不相容性

Java 奇偶排序不相容性,java,sorting,openjdk,Java,Sorting,Openjdk,我是Java新手,我遇到了以下问题。我需要按升序对整数数组进行排序,使偶数在一半,奇数在另一半 因此,我有一个特殊的比较: static class EvenOddSort implements Comparator<Integer> { @Override public int compare(Integer x, Integer y) { if (x == y) { return 0; } i

我是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;
    }
}
我还有以下测试:

@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>
数组首先在元素[0]处不同;应为:但为:junit.framework.AssertionFailedError:数组首先在元素[0]处不同;预期:但是:
  • 你能帮我使它在所有的
    openJDK的
    之间兼容吗
  • 另外,如果知道我做错了什么,那就太好了

欢迎任何意见

你的整个比较仪都坏了,我一直看到它有更多的问题

就这样做吧:

if (x%2 != y%2) {
  if (x%2==0) {
     return -1;
  } else {
     return 1;
  }
} else {
  return x.compareTo(y);
}
首先检查它们是否都是奇数或偶数。如果它们不同,则根据奇数或偶数进行排序


然后,如果它们都是奇数或偶数,则返回标准的整数比较功能。

“失败”信息永远不够。请详细说明。但基本上,你的<代码>比较方法现在是不正确的——琐碎地,考虑<代码>比较(0, 0)。应该返回0,但将返回1。谢谢您的回答。我已经用失败消息更新了“失败”<代码>比较(0,0)-我已经用这个例子更新了比较器。因此,下一步应该是输出它进行的每个比较,包括结果-并检查它是否是您想要的。您使用的是整数,所以应该执行x.equals(y)@TimB或至少
x.intValue()==y.intValue()
@JonSkeet试图教那个家伙如何调试程序中的逻辑问题,而你只是放弃了答案。@Ordous我知道。虽然有很多问题,但要找到它们并不容易。
if (x%2 != y%2) {
  if (x%2==0) {
     return -1;
  } else {
     return 1;
  }
} else {
  return x.compareTo(y);
}