Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 程序中的compareTo()方法问题_Java - Fatal编程技术网

Java 程序中的compareTo()方法问题

Java 程序中的compareTo()方法问题,java,Java,我正在尝试使用java中的compareTo()方法进行比较 字符串的“级别” 他们按照复杂程度的顺序排列如下:学徒、巫师、法师、巫师、萨满 然而,当尝试使用compareTo()方法时,我在比较级别时的结果是负数(或正数),即使它们是相同的 我是否可以使用另一种方法来执行适当的if语句 当一个级别与另一个级别进行比较时,该级别的复杂度更低、相等或更高?或者我必须执行一系列if语句参数来匹配每个级别 String otherLevel = m.level; String lowcaseLev

我正在尝试使用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; }
           }
        }
     }
String otherLevel=m.level;
字符串lowcaseLevel=otherLevel.toLowerCase();
int结果=级别。比较到(lowcaseLevel);
如果(结果<0){
健康=健康+(m.health*.02);
m、 健康=(m.health-(m.health*.02));}
其他的
{
如果(结果==0){
健康=健康+(m.health*.05);
m、 健康=m.health-(m.health*.05);
{
如果(m.health>(10*lengthOfTime)){
健康=健康+(10*lengthOfTime);}
其他的
{
如果(m.health<(10*长度时间)){
健康=健康+m健康;
m、 运行状况=0;}
}
}
}

你说有一个复杂的顺序,依次是:“学徒、巫师、法师、巫师、萨满”

您当然可以直观地理解,当涉及字符串值时,
wizard
大于
shaman
。这就是您可以称之为自然排序的内容

因此,字符串的自然排序不是您想要的。您需要另一种机制。Java确实提供了这样一种机制:
enum
。示例代码:

public enum Level
{
    APPRENTICE,
    WIZARD,
    MAGE,
    SORCERER,
    SHAMAN
}
Java中的枚举是特殊的。它们实现自身的
可比
(因此上面的
级别
实现
可比
),其顺序取决于其值的声明。这意味着:

Level.WIZARD.compareTo(Level.SORCERER)
返回一个负数,因为
向导
巫师
之前声明

但是:如果
向导
是在
巫师
之后声明的,结果会是相反的!提到它(强调我的):

枚举常量只能与相同枚举类型的其他枚举常量进行比较。此方法实现的自然顺序是常量声明的顺序。


总结一下:在你的代码中使用上面这样的枚举!

为什么你的方法中有一个随机的
{}
块?这真的没有必要。“它们按照复杂程度的顺序排列如下:学徒、向导、法师、巫师、萨满”compareTo()可能不是您在这里的最佳选择,因为此方法通常不接受任何自然顺序。@DanielRuf枚举在排序方面非常特殊……但是的,它是一个solution@fge抱歉,这只是编码的一部分。它指的是已声明对象的级别。