2012-05-02 57 views
-1

我试图比较一些球员与他们已经获得的运行量的比较。java比较整数作为字符串与比较 - 奇数结果

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; 
    } 
+3

什么intConvert? – MByD

+1

请注意,'compareTo'不必返回-1或1,它可以返回更小或更大的值。基本上,约定是:<0表示较小,== 0表示相等,> 0表示较大。 – Thomas

回答

3

我假定intConvert(...)转换的intString,因此你获得其meahs "25"大于"100"因为第一个字符是词汇比较大(2> 1)。

如果你想获得正确的比较坚持比较int S或如果你需要使用一个String创建等长的字符串,并在前面missings补零(如25 -> "025")

0

比较Numbers是以合理的方式表示为String,您需要持续格式化他们都以同样的方式。

Strings use lexical comparisons.这意味着"5">"20"因为5>2。为了获得逻辑上的预期输出,您需要使用某种格式化程序来格式化数字,以使其具有词汇上的可比性。

"05"<"20"

最简单的事情是使用String.format()和模式的所有数字格式化为Strings所以他们将始终如一词法比较。

String.format("%04d", yourInteger); 

这将产生在为左补齐0通过了4个位置全部int秒。

String.format("%04d", 5); 

会产生0005

充分利用"%0Xd"其中X是你想让它格式化位数。

+0

'X'是一个变量吗? – arunmoezhi

0

您不必将数字转换为字符串只是进行排序,你可以这样做:

class ComparePlayersByRuns implements Comparator<Player> { 
    public int compareTo(Player p1, Player p2) { 
     return p1.getRuns().compareTo(p2.getRuns()); 
    } 
}