我是编码游戏编码的新手,每个玩家都有四个统计数据:str
,con
,dex
和int
。对于特定的玩家种族,用户选择两个增加两个的统计数据,反过来另外两个统计数据减少两个。目前,我正在确定应根据选择增加的数量减少哪些统计数据。 stat1
是用户增加的第一个统计信息的名称,stat2
是第二个统计信息的名称,这两个统计信息来自用户输入。这是我目前如何将其作为if / else if / else。我想知道它是否可以作为开关语句轻松编写。
if((stat1.startsWith("con") && stat2.startsWith("dex"))||(stat1.startsWith("dex") && stat2.startsWith("con")))
{
addStat("int",-2);
addStat("str",-2);
}
else if((stat1.startsWith("con") && stat2.startsWith("int"))||(stat1.startsWith("int") && stat2.startsWith("con")))
{
addStat("dex",-2);
addStat("str",-2);
}
else if((stat1.startsWith("con") && stat2.startsWith("str"))||(stat1.startsWith("str") && stat2.startsWith("con")))
{
addStat("dex",-2);
addStat("int",-2);
}
else if((stat1.startsWith("dex") && stat2.startsWith("int"))||(stat1.startsWith("int") && stat2.startsWith("dex")))
{
addStat("con",-2);
addStat("str",-2);
}
else if((stat1.startsWith("dex") && stat2.startsWith("str"))||(stat1.startsWith("str") && stat2.startsWith("dex")))
{
addStat("int",-2);
addStat("con",-2);
}
else if((stat1.startsWith("str") && stat2.startsWith("int"))||(stat1.startsWith("int") && stat2.startsWith("str")))
{
addStat("dex",-2);
addStat("con",-2);
}
答案 0 :(得分:4)
不,不是作为开关声明。但是通过使用集合和循环可以更加简洁:
Set<String> allStats = new HashSet<>(Arrays.asList("dex", "str", "con", "int"));
Set<String> increasedStats = new HashSet<>();
// TODO: let the user choose the stats to increase,
// and store them in increadedStats
// then decrease the two other ones:
for (String stat : allStats) {
if (!increasedStats.contains(stat)) {
addStat(stat, -2);
}
}
答案 1 :(得分:4)
如果您要定义enum
并且具有此枚举类型的stat1
和stat2
,那么您的代码可能非常简单:
public enum Stat {
DEX,
INT,
STR,
CON;
}
for(Stat stat : EnumSet.complementOf(EnumSet.of(stat1,stat2))) {
addStat(stat,-2);
}
如果你发现自己写了这么长的if-else-train,你应该总是向后退一步并重新考虑你的设计。
也许最好不要有两个单独的变量stat1
和stat2
,只是从一开始就把它表示为一个集合。
答案 2 :(得分:0)
无法切换多个变量。这在Java文档here中记录如下:
开关使用byte,short,char和int原始数据 类型。它也适用于枚举类型(在枚举类型中讨论), String类,以及一些特定的包装类 原始类型:字符,字节,短整数和整数(在 数字和字符串)。
对不起,如果&#39;那么你将不得不坚持使用。对于这一个。