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