我正在尝试使用java中的compareTo()方法进行比较 字符串的“级别”。
按顺序排列如下:学徒,巫师,法师,巫师,萨满
然而,当尝试使用compareTo()方法时,我的结果在比较水平时是负数(或正数),即使它们是相同的。
我是否可以使用另一种方法来执行正确的if语句 当一个水平与另一个水平相比较低,相等或更高的复杂程度?或者我是否必须执行if语句参数链以匹配每个级别?
String otherLevel = m.level;
String lowcaseLevel = otherLevel.toLowerCase();
int result = level.compareTo(lowcaseLevel);
if (result < 0){
health = health + (m.health *.02);
m.health = (m.health - (m.health *.02)); }
else
{
if(result == 0){
health = health + (m.health * .05);
m.health = m.health - (m.health * .05);
{
if (m.health > (10 * lengthOfTime)){
health = health + (10 * lengthOfTime);}
else
{
if (m.health < (10 * lengthOfTime)){
health = health + m.health;
m.health = 0; }
}
}
}
答案 0 :(得分:1)
你说有一种复杂的顺序,顺序是:“学徒,巫师,法师,巫师,萨满”。
您当然以直观的方式理解,当涉及字符串值时,wizard
大于shaman
。这就是你可以称之为自然排序。
因此,字符串的自然排序不是您想要的。你需要另一种机制。 Java确实提供了这样一种机制:enum
。示例代码:
public enum Level
{
APPRENTICE,
WIZARD,
MAGE,
SORCERER,
SHAMAN
}
Java中的枚举很特别。他们自己实施Comparable
(因此Level
以上实现Comparable<Level>
),订单取决于值的声明。这意味着:
Level.WIZARD.compareTo(Level.SORCERER)
返回一个负数,因为WIZARD
之前已声明SORCERER
。
但是:在 WIZARD
之后应该SORCERER
宣布,结果将是相反的! javadoc for Enum.compareTo()
提及它(强调我的):
枚举常量只能与同一枚举类型的其他枚举常量相媲美。 此方法实现的自然顺序是声明常量的顺序。
总结一下:在你的代码中使用如上所述的枚举!