compareTo()程序中的方法问题

时间:2014-03-15 21:45:17

标签: java

我正在尝试使用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; }
           }
        }
     }

1 个答案:

答案 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()提及它(强调我的):

  

枚举常量只能与同一枚举类型的其他枚举常量相媲美。 此方法实现的自然顺序是声明常量的顺序

总结一下:在你的代码中使用如上所述的枚举!