请找到以下代码:
PercentTextbox
对于某些输入,它会抛出以下错误:
UserControl
请帮忙!
答案 0 :(得分:3)
我假设你在问题中有拼写错误,比较方法的实际签名是int compare(Long m1, Long m2)
,或者你的代码根本不会通过编译,这不是你描述的问题。
实际问题是你试图通过将两个长片之间的差异转换为int
来比较它们。当差异不在int
类型的范围内时,这可能会给您不正确的结果。如果您不想依赖return m2.compareTo(m1)
的{{1}}实施,则可以使用return m2 < m1 ? -1 : m2 > m1 ? 1 : 0
代替Long
。
答案 1 :(得分:2)
这样做:
Comparator<Long> d = new Comparator<Long>() {
public int compare(long m1, long m2) {
return (int) (m2 - m1);
}
};
与 NOT 在比较器接口
中实现抽象方法相同public int compare(T a1, T a2);
所以你的代码没有编译
你应该使用(是java8)方法参考
Comparator<Long> d = Long::compare;
但是这有什么问题:(int) (m2 - m1);
你可能会问自己......
你正在强制将2 a长度转换为整数,因此结果可以是非常负的Long或正整数
检查此示例以澄清:
long b = 1000_000_000_000_000L;
long a = 100L;
System.out.println(a - b);
System.out.println((int) (a - b));
结果是 很久
-999999999999900
as int
1530495076
这肯定打破了比较结果
答案 2 :(得分:0)
List<Long> list = Arrays.asList(3L, 2L, 1L);
list.sort(new Comparator<Long>() {
@Override
public int compare(Long o1, Long o2) {
return o1.compareTo(o2);
}
});
System.out.println(list);
OR:
List<Long> list = Arrays.asList(3L, 2L, 1L);
list.sort(Long::compareTo);
System.out.println(list);
答案 3 :(得分:0)
这里有两件事值得一提:
换句话说:而不是做
int compare(Long l1, long l2) {
return l2 - l1;
你可以这样做:
return l2.compareTo(l1);
代替。这更容易阅读;和表现基本相同。