为啥我在 switch for java 中使用了“default”这个词? [复制]

Posted

技术标签:

【中文标题】为啥我在 switch for java 中使用了“default”这个词? [复制]【英文标题】:Why did I use word 'default' in switch for java? [duplicate]为什么我在 switch for java 中使用了“default”这个词? [复制] 【发布时间】:2019-11-21 01:44:13 【问题描述】:

我正在学习 switch 语句。 我写了一些这样的代码:

String computerMove;
switch ( (int)(3*Math.random()) )
   case 0:
      computerMove = "Rock";
      break;
   case 1:
      computerMove = "Paper";
      break;
   case 2:
      computerMove = "Scissors";
      break;



System.out.println("The computer`s move is " + computerMove);

我在编译代码后被要求添加“case”或“default”或“”。 我尝试将代码“case 2:”更改为“default:”,它成功了。我不明白为什么它有效?我的代码似乎包含了所有可能的值。

【问题讨论】:

default 表示没有匹配大小写时使用的大小写,即不是 0,1 或 2 所有可能的值都基于您的logic,但不基于变量类型。 这里有一个使用开关***.com/questions/4649423/…的例子 【参考方案1】:

当您使用带有 int 的 switch 时,编译器只会检查所有 case 选项是否都是 int 并且是唯一的,但它不会检查此 int 的可能范围。您甚至可以添加case 532:,它仍然可以工作,因为编译器只是验证您的案例有int 类型

【讨论】:

你的意思是编译器只是检查所有 case 选项的类型而没有实际值吗?总是使用“默认”会更好吗? 也许吧。我会将您明确的 0、1、2 案例保留为明确编码。我可能会考虑添加一个“默认值:”,它以某种方式报告发生了意外情况(在您的情况下,表达式小于 0 或大于 2)。它“不应该发生”,但是当它发生时(ok:'if')快速检测它是有用的。在您的简单示例中,这有点矫枉过正,但在更复杂的程序中,它可能很有价值。 @KMING 是的,这就是我的意思,是的,最好始终使用默认值,即使它应该永远不会发生,您可以使用 System.out.println("这本不应该发生")

以上是关于为啥我在 switch for java 中使用了“default”这个词? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 java 中得到 Undefinedlabel 错误?

为啥这个 switch 语句在运行时会结束 while 循环?

为啥开关(Java)会发生这种情况? [复制]

为啥“defau4t”在 switch 语句中是合法的? [复制]

为啥我在switch-case语句下嵌套if-else语句会报错?怎么改?

为啥 Java switch on contiguous ints 似乎在添加案例时运行得更快?