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);