1

当我输入以下方法并用Java编译时,我得到“错误:无法访问的语句”,为什么?

  String getRankChar(int rank,boolean isFront)
  {
    switch (rank)
    {
      case 0 : return isFront?"<":">";break;
      case 1 : return isFront?"[":"]";break;
      case 2 : return isFront?"[":"]";break;
      case 3 : return isFront?"(":")";break;
      case 4 : return isFront?"(":")";break;
      default : return " ";break;
    }
}
4

7 回答 7

10

break每个语句之后都有一个语句return所有这些break语句都无法访问,正是因为您在每个语句之前返回。

根据JLS第 14.21 节:

如果由于无法访问而无法执行语句,则这是编译时错误。

和:

[...]如果 S 之前的语句可以正常完成,则非空块中不是 switch 块的所有其他语句 S 都是可访问的。

...

, break, continue, returnorthrow语句不能正常完成。

return语句无法正常完成,因此该break语句无法访问(对于您的每个案例)。

只需删除break语句,就可以了。

于 2013-10-29T21:11:06.333 回答
2

因为默认情况下的 break 语句永远不会被执行,因为它总是返回 " " 并退出方法。

于 2013-10-29T21:11:47.897 回答
1

因为你return然后break。返回已经退出该方法,因此该break语句不可访问。

于 2013-10-29T21:11:11.520 回答
1

无法到达每行中的 break 语句,因为您之前执行了 return。

于 2013-10-29T21:12:07.467 回答
0

return 语句后的代码无法访问,因此请删除 return 语句后的任何内容。

因为,在你回来之后,就没有什么可执行的了。

于 2013-10-29T21:11:19.677 回答
0

return停止执行函数。
因此,您的所有breaks 永远无法执行。

break不是结束 a 的魔法咒语case;这只是一种确保控制不会通过的方法。
如果您使用停止控制流的不同语句(returncontinuethrow),则不需要它。

于 2013-10-29T21:11:20.177 回答
0

return 表示从调用方法的位置退出

并且指针不再继续

因此您的程序在任何情况下都不会达到您的break陈述

因此错误

于 2013-10-29T21:13:19.233 回答