gpt4 book ai didi

java - 程序中的compareTo()方法问题

转载 作者:行者123 更新时间:2023-12-01 13:16:26 25 4
gpt4 key购买 nike

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

最佳答案

你说存在一个复杂程度的顺序,依次为:“学徒、巫师、法师、术士、萨满”。

您当然可以直观地理解,当涉及字符串值时,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() 提到它(强调我的):

Enum constants are only comparable to other enum constants of the same enum type. The natural order implemented by this method is the order in which the constants are declared.

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

关于java - 程序中的compareTo()方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22430159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com