试图理解为什么嵌套的switch case语句没有编译

  • 本文关键字:case switch 语句 编译 嵌套 java
  • 更新时间 :
  • 英文 :


所以我想弄清楚为什么我的IDE不接受这段代码。它给我的错误是缺少return语句。但经过一番挖掘,我发现当我已经有了回报声明时,我真的不需要休息了。这是我的密码。

月份、日期和年份是已经在私有构造函数中初始化的私有变量。每个切换案例都应该采用特定格式的日期输入和日期输出。

public String toString(int format) {
switch (format) {
case 1:
return month + "/" + day + "/" + year;
case 2:
String pattern = "00";
DecimalFormat decimalFormat = new DecimalFormat(pattern);
return decimalFormat.format(month) + "/" +
decimalFormat.format(day) + "/" +
year;
case 3:
String abbrev = "JanFebMarAprMayJunJulAugSepOctNovDec";
return abbrev.substring(month * 3 - 3, month * 3 - 1) +
"/" + day + "/" + year;
case 4:
switch (month) {
case 1:
return "January" + " " + day + ", " + year;
case 2:
return "February" + " " + day + ", " + year;
case 3:
return "March" + " " + day + ", " + year;
case 4:
return "April" + " " + day + ", " + year;
case 5:
return "May" + " " + day + ", " + year;
case 6:
return "June" + " " + day + ", " + year;
case 7:
return "July" + " " + day + ", " + year;
case 8:
return "August" + " " + day + ", " + year;
case 9:
return "September" + " " + day + ", " + year;
case 10:
return "October" + " " + day + ", " + year;
case 11:
return "November" + " " + day + ", " + year;
case 12:
return "December" + " " + day + ", " + year;
default:
System.out.println("Error please try again");
break;
}
default:
System.out.println("Error please try again");
}
}

您的方法应该返回一个String。

这意味着:任何路径;退出";需要返回一个值。

default:
System.out.println("Error please try again");

不返回值。它打印一条消息。

换句话说:您的两个默认情况应该返回一个字符串,例如"invalid input"。但在现实世界中,这不是你想要的。

您的代码似乎是关于某种Date类的。并且您的toString(int)实现允许无效数据。这就是你的问题开始的地方!您应该在某个时候验证字段。但当你被要求格式化它时,这一点是而不是。如果你在那一点上这样做,该方法应该抛出一个异常来指示:";因为数据不好而不能做我的工作;。

因此,有两种选择:要么您的代码在用户提供所有用户输入时验证这些输入(并拒绝坏数据(,要么您的toString()方法应该对无效数据抛出异常。

最新更新