【发布时间】:2022-01-20 07:26:38
【问题描述】:
按字典顺序对字符数组进行排序,附加条件是所有 c 都在所有 b 之前。这可以手动完成,但我想使用比较器通过内置排序对其进行编码。我写的代码-
static class Sort implements Comparator<Character> {
@Override
public int compare(Character x, Character y) {
if(x == 'c' && y == 'b') {
return y - x;
}
return x - y;
}
}
public static void main(String[] args) {
String s = "abracadabra";
int n = s.length();
Character[] res = new Character[n];
for (int i = 0; i < n; i++) {
res[i] = s.charAt(i);
}
Arrays.sort(res, new Sort());
System.out.println(Arrays.toString(res));
}
给出输出:[a, a, a, a, a, b, c, b, d, r, r]。 c 只出现在 b 之一之前。如果我将比较器更改为以下,那么它会给出正确的输出。
public int compare(Character x, Character y) {
if(x == 'c' && y == 'b' || x == 'b' && y == 'c') {
return y - x;
}
return x - y;
}
我的问题是为什么在这两种情况下返回“y-x”都会给出正确答案?如果在一种情况下返回“y-x”是正确的,那么在另一种情况下不应该返回“x-y”是正确的吗?而不是“y-x”,返回 -1 或 +1 也不起作用。 PL。解释内部发生的事情。谢谢!
【问题讨论】:
-
如果你反转参数,你必须否定结果。
标签: java sorting comparator