正常代码在
下面工作ShipSize size = shipSize.startsWith("s") ? ShipSize.SMALL:
(shipSize.startsWith("m") ? ShipSize.MEDIUM: ShipSize.LARGE); // get ship size
这是更改代码的正确方法,因此字符串等于单词。我似乎没有为我工作。
ShipSize size = shipSize.equals("small") ? ShipSize.SMALL:
(shipSize.equals("medium") ? ShipSize.MEDIUM: ShipSize.LARGE); // get ship size
任何想法为什么?
答案 0 :(得分:1)
请注意,这假设您的输入实际上是"small"
,"medium"
或"large"
,并且您的枚举是:
public enum ShipSize
{
SMALL,
MEDIUM,
LARGE,
;
}
如果是这种情况,您可以这样做:
final ShipSize size = ShipSize.valueOf(shipSize.toUpperCase());
如果常量不存在, .valueOf()
将抛出IllegalArgumentException
,因此如果风险存在,您应该捕获并适当恢复。
答案 1 :(得分:1)
等于区分大小写,具体取决于您的输入,因此您可能需要使用.equalsIgnoreCase()
代替.equals()
除此之外,你没有做过任何“错误”。您需要准确指定输入内容以获取更多详细信息。
答案 2 :(得分:1)
ShipSize size = "small".equalsIgnoreCase(shipSize.name) ? ShipSize.SMALL: ("medium".equalsIgnoreCase(shipSize.name) ? ShipSize.MEDIUM: ShipSize.LARGE); // get ship size
假设ShipSize是枚举,那么您可以使用枚举的.name来获取String。此外,在比较时将常量放在第一位,以避免可能的空指针异常。
编辑:改为equalsIgnoreCase。