java将整数作为字符串与比较器进行比较-奇数结果
我试图用一个比较器来比较一些球员的跑动次数java将整数作为字符串与比较器进行比较-奇数结果,java,int,comparator,dereference,Java,Int,Comparator,Dereference,我试图用一个比较器来比较一些球员的跑动次数 System.out.println("Comparing: " + p2.getRuns() + " and " + p1.getRuns()); int newRESULT = intConvert(p2.getRuns()).compareTo(intConvert(p1.getRuns())); System.out.println("Returns: " + newRESULT); return newRESULT; 然而,这返回: 比较:
System.out.println("Comparing: " + p2.getRuns() + " and " + p1.getRuns());
int newRESULT = intConvert(p2.getRuns()).compareTo(intConvert(p1.getRuns()));
System.out.println("Returns: " + newRESULT);
return newRESULT;
然而,这返回:
比较:25和0,
收益:2
比较:0和100,
返回:-1
比较:25和100,
回报:1
…并因此以错误的顺序命令玩家
第一个比较是否也应该返回1、第二个-1和最后一个-1
intConvert:
private static String intConvert(int x)
{
return "" + x;
}
我假设intConvert(…)
将int
转换为String
,因此得到的词法比较意味着“25”
大于“100”
,因为第一个字符大于(2>1)
如果要获得正确的比较,请坚持比较int
s,或者如果需要使用String
创建长度相等的字符串,并在前面填充缺失的零(例如25->“025”)
我假设intConvert(…)
将int
转换为String
,因此,您可以进行词法比较,这意味着“25”
大于“100”
,因为第一个字符大于(2>1)
如果要获得正确的比较,请坚持比较
int
s,或者如果需要使用String
创建长度相等的字符串,并在前面填写缺失的零(例如25->“025”)
以合理的方式比较表示为字符串的数字,您需要以相同的方式一致地格式化它们
这意味着“5”
将成为“20”
,因为5
是而不是2
。要获得逻辑上预期的输出,您需要使用某种格式化程序对数字进行格式化,以使它们在词汇上具有可比性
“05”
是要以合理的方式比较表示为字符串的数字
,您需要以相同的方式一致地格式化它们
这意味着“5”
将成为“20”
,因为5
是而不是2
。要获得逻辑上预期的输出,您需要使用某种格式化程序对数字进行格式化,以使它们在词汇上具有可比性
“05”
是您不必将数字转换为字符串进行排序,您可以执行以下操作:
class ComparePlayersByRuns implements Comparator<Player> {
public int compareTo(Player p1, Player p2) {
return p1.getRuns().compareTo(p2.getRuns());
}
}
不,比较不需要返回1、0或-1,文档中说:
返回:
作为第一个参数的负整数、零或正整数小于、等于或大于第二个参数
排序时不必将数字转换为字符串,您可以执行以下操作:
class ComparePlayersByRuns implements Comparator<Player> {
public int compareTo(Player p1, Player p2) {
return p1.getRuns().compareTo(p2.getRuns());
}
}
不,比较不需要返回1、0或-1,文档中说:
返回:
作为第一个参数的负整数、零或正整数小于、等于或大于第二个参数
请注意,compareTo
不必返回-1或1,它也可以返回更小或更大的值。基本上,约定是:<0表示更小,==0表示相等,>0表示更大。请注意,compareTo
不必返回-1或1,它也可以返回更小或更大的值。基本上惯例是:<0表示更小,==0表示相等,>0表示更大。X
可以是变量吗?X
可以是变量吗?
class ComparePlayersByRuns implements Comparator<Player> {
public int compareTo(Player p1, Player p2) {
return p1.getRuns().compareTo(p2.getRuns());
}
}
Comparators.comparing(Player::getRuns);