为什么下面的代码:
class swi
{
public static void main(String[] args)
{
int a=98;
switch(a)
{
default:{ System.out.println("default");continue;}
case 'b':{ System.out.println(a); continue;}
case 'a':{ System.out.println(a);}
}
System.out.println("Switch Completed");
}
}
给出错误:
在循环外继续
失败是switch语句的标准行为,因此,在switch语句中使用Continue没有意义。Continue语句仅在for / while /
do..while循环中使用。
根据我对您意图的理解,您可能想写:
System.out.println("default");
if ( (a == 'a') || (a == 'b') ){
System.out.println(a);
}
我还建议您将默认条件放在最后。
编辑:continue语句不能在switch语句中使用并不完全正确。(带有理想标记的) continue 语句完全有效。例如:
public class Main {
public static void main(String[] args) {
loop:
for (int i=0; i<10; i++) {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 9:
continue loop;
}
System.out.println(i);
}
}
}
这将产生以下输出:0 2 4 6 8
问题内容: 此功能是否将在以后的Java版本中使用? 有人可以解释为什么我不能这样做吗,就像Java 语句起作用的技术方式一样? 问题答案: 带有案例的switch语句已在Java SE 7中实现,至少在首次提出要求后的 16年。没有提供延迟的明确原因,但可能与性能有关。 在JDK 7中实现 现在,该功能已 通过“脱糖”过程实现。在声明时使用常量的干净,高级语法在编译时扩展为遵循模式的更复杂的代码
问题内容: 在 Java 7中 ,对象可以位于语句的表达式中。有人可以从官方文档中解释以下声明吗? 与使用链式if-then-else语句相比,Java编译器通常从使用 String对象的 switch语句生成更有效的字节码。 问题答案: Java代码 具有一个类的两个版本,例如 与: 与: 字节码 让我们看一下字节码。获取版本的字节码: 获取版本的字节码: 结论 在第一个版本中,通过为每个条件调
我有两种枚举类型(并希望用户能够添加自己的)。 如果我不在接受枚举类型的方法中使用枚举属性,这就很好。 但是,如果我希望模板E被识别为一个枚举(在这里的开关中使用),我会得到错误“不能打开类型E的值”(在Eclipse中,开关(E)中的“E”带有红色下划线) 我对擦除有一点了解,它在编译时擦除了关于模板的所有信息,所以这就是问题所在。但是我尝试传入clazz类或者实现一个接口都没有成功。对此有什么
问题内容: 我决定使用Swift的case语句和元组。它看起来像是该语言的较酷功能之一。 我决定玩月/日/年元组。令我惊讶的是,我不能在switch语句中使用常量元组值作为案例。这是一个示例(可以粘贴到Playground中并运行) 注释掉的代码不会编译(如果重要的话,在Xcode 6.3中)。在下面的情况下(我分别列出了joesBirthday元组的所有元素)更难键入且更难阅读,确实可以工作)
问题内容: 这是Sun Java教程 的摘录: 一种开关用的工作原理,,,和原始数据类型。它还与枚举类型(在类和继承讨论)和少数特殊类作品是“包装”某些基本类型:,,,和(在简单的数据对象讨论)。 不允许原始数据类型是有充分理由的。有人知道这是什么吗? 问题答案: 我认为在某种程度上,这可能是基于开关的典型用法的任意决定。 切换基本上可以通过两种方式(或原则上是组合)来实现:对于少数情况或值分散的
问题内容: (注:编辑过的问题;先前的意图不明确) 考虑以下代码: 此代码可以正常工作。 但是,如果我替换: 与: 然后编译器抱怨: java:/path/to/Foo.java:whatever:枚举开关大小写标签必须是枚举常量的非限定名称 (要求内联常量的一个原因是switch语句在每种情况下都需要常量,并且两个这样的常量值可能都不相同。编译器在编译时检查switch语句中是否有重复的常量值;