【发布时间】:2020-09-05 17:59:20
【问题描述】:
我从post 获得了带有switch 语句的这段代码,它工作得非常好:
String getOrdinal(final int day) {
if (day >= 11 && day <= 13) {
return "th";
}
switch (day % 10) {
case 1: return "st";
case 2: return "nd";
case 3: return "rd";
default: return "th";
}
}
但是,如果我将其更改为以下内容,它就会中断,因为除了 case 1 之外的所有情况都会被执行:
static String getOrdinal(final int day) {
StringBuilder ordinalBuilder = new StringBuilder();
ordinalBuilder.append("<sup>");
if (day >= 11 && day <= 13) {
ordinalBuilder.append("th") ;
}
switch (day % 10) {
case 1: ordinalBuilder.append("st");
case 2: ordinalBuilder.append("nd");
case 3: ordinalBuilder.append("rd");
default: ordinalBuilder.append("th");
}
ordinalBuilder.append("</sup>");
return ordinalBuilder.toString();
}
当我传入2 时,这将打印2<sup>ndrdth</sup>。我尝试将构建器更改为缓冲区,但我得到了相同的响应......这可能是一个错误还是我犯了一些错误?
【问题讨论】:
-
内联 switch 语句没有任何好处,您应该将
getOrdinal方法分开并让您的代码调用它。尝试将 11、12 或 13 传递给您的代码。您还创建了另一个错误。 -
我希望我能给@TimBender 更多的 +1。这个问题就是货物崇拜编程的定义。
标签: java switch-statement