这个功能是否会被放入以后的Java版本中?
有人可以解释为什么我不能这样做,就像Java的switch
声明的技术方式一样吗?
使用JDK/12 EarlyAccess Build 10,JEP-325 Switch Expressions已作为JDK中的预览功能集成.表达式的示例代码(如在JEP中一样):
Scanner scanner = new Scanner(System.in);
Day day = Day.valueOf(scanner.next());
switch (day) {
case MONDAY, TUESDAY -> System.out.println("Back to work.") ;
case WEDNESDAY -> System.out.println("Wait for the end of week...") ;
case THURSDAY,FRIDAY -> System.out.println("Plan for the weekend?");
case SATURDAY, SUNDAY -> System.out.println("Enjoy the holiday!");
}
Run Code Online (Sandbox Code Playgroud)
在哪里Day
作为一个枚举
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Run Code Online (Sandbox Code Playgroud)
该预览语言和VM特点JEP-12已经阐述了如何功能可以编译和使用运行时期间启用javac
和java
.
如何使用Maven试用这个功能?
我已经阅读了很多关于 SO 的答案,但似乎无法找到明确的答案,为什么如果在这种情况下省略了 break,则案例“C”将始终被评估为真,而填充的新数组只会“G” ”的。我清楚地明白,最好在这里使用 break,因为我只想评估特定的匹配,而不是为了如果确实省略了 break,为什么最后一种情况总是正确的。
var dna = "ATTGC";
var outArr = [];
dna.split("").forEach(function(e,i){
switch(e) {
case "G": outArr[i] = "C"; break;
case "T": outArr[i] = "A"; break;
case "A": outArr[i] = "T"; break;
case "C": outArr[i] = "G"; break;
}
console.log(outArr);
})
Run Code Online (Sandbox Code Playgroud) class switch1
{
public static void main(String args[])
{
int a = 10;
switch(a)
{
default: System.out.println("Default");
case -1: System.out.println("-1");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这个程序将执行"default"和"case -1"语句,因为在匹配条件之后没有指定break(在这种情况下是在"default"之后).
但我不明白的是
a)为什么break
需要在switch
声明中?
b)为什么它甚至执行无效匹配条件的语句(即执行"case -1"))如果它只是匹配的话?
我已经在stackoverflow中搜索了有关问题的原因,为什么在找到匹配的情况后switch不会中断.
例如,我编写了一些模拟骰子的代码.对于每次投掷,我都会因为统计原因而计算(一,...... = int).
switch (actualThrow) {
case (1): one++;
case (2): two++;
case (3): three++;
case (4): four++;
case (5): five++;
case (6): six++;
}
Run Code Online (Sandbox Code Playgroud)
我不要知道,这种情况下,(3)情况(6)将被检查,如果我的罚球是3(我们为什么需要case语句后打破?),它会通过插入阻止break;
,但我想明白了,为什么显然,以下情况似乎被检查,但执行,虽然条件没有得到满足.
我正在网上学习Java并且在切换课程中上课.为了愚弄,我会在特定情况(将被执行)之后删除其中一个中断.我曾想过它会检查下一个案例,看看条件是否为false,并在退出前跳到默认情况.相反,它执行了不正确的情况并在默认情况之前中断.
这里出了什么问题?
public class Switch {
public static void main(String[] args) {
char penaltyKick = 'R';
switch (penaltyKick) {
case 'L': System.out.println("Messi shoots to the left and scores!");
break;
case 'R': System.out.println("Messi shoots to the right and misses the goal!");
case 'C': System.out.println("Messi shoots down the center, but the keeper blocks it!");
break;
default:
System.out.println("Messi is in position...");
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:忘了提.输出是:
Messi shoots to the right and misses the goal!
Messi shoots down the center, but the keeper blocks …
Run Code Online (Sandbox Code Playgroud) 在下面的代码中,当我评论休息时,当我写一个案例(说"开始")它将打印下面输出的所有案例,意味着所有三行都打印,当我写"停止"它打印两个输出"机械停止"和"没有给出命令",为什么我需要在编译器搜索案例时给出break语句,如果匹配则打印相关输出.
import java.util.Scanner;
public class App{
public static void main(String args[]){
Scanner input = new Scanner(System.in);
String text = input.nextLine();
switch(text){
case "start":
System.out.println("Mechine Started");
break;
case "stop":
System.out.println("Mechine stopped");
break;
default:
System.out.println("No command given");
}
}
}
Run Code Online (Sandbox Code Playgroud)