中断并继续在 Java 中不起作用
break and continue doesn't work in Java
我制作了这个反转字符串的程序。它可以通过两种方式完成。所以我想问用户首选的方法。为了摆脱 if else
我使用 break 关键字,后跟每个选择的标签。
这个程序在没有 break 和 label 的情况下工作正常,但是在使用 break 时它会出错。
import java.util.Scanner;
public class ReverseString {
public static void main(String[] args) {
System.out.println("Choose a method:");
Scanner ch = new Scanner(System.in);
int choice = ch.nextInt();
if (choice == 1)
{
break first;
}
else
{
break second;
}
first:
Scanner in = new Scanner(System.in);
System.out.print("Enter a string to reverse:");
String original = in.nextLine();
String reverse = "";
int i, length = original.length();
for (i=length-1; i>=0; i--)
{
reverse = reverse + original.charAt(i);
}
System.out.println(reverse);
second:
StringBuilder rev = new StringBuilder(in.nextLine());
String revc = rev.reverse().toString();
System.out.println(revc);
}
}
和错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Syntax error, insert ":: IdentifierOrNew" to complete ReferenceExpression
Syntax error, insert "AssignmentOperator Expression" to complete Assignment
Syntax error, insert ";" to complete Statement
Scanner cannot be resolved to a variable
in cannot be resolved to a variable
in cannot be resolved
Syntax error, insert ":: IdentifierOrNew" to complete ReferenceExpression
Syntax error, insert "AssignmentOperator Expression" to complete Assignment
Syntax error, insert ";" to complete Statement
StringBuilder cannot be resolved to a variable
rev cannot be resolved to a variable
in cannot be resolved
rev cannot be resolved
at welcome.ReverseString.main(ReverseString.java:25)
在Java中,break
(和continue
)主要是在循环中使用,break
在switch
中也有作用。您可以使用 break
来跳出带标签的块,但坦率地说,使用 if
语句这样做意义不大。 (详情见 JLS §14.15。)
与其尝试使用有效的方法 "goto",不如将反转的两种方法放入 方法 ,然后从连接到您的块中调用适当的方法if
和 else
(您目前有 break
)。
您可以在 if 语句中使用 break
,但您必须标记块。看这个例子:
if (choice == 1) first: {
// ...
break first;
// ...
} else second: {
// ...
break second;
// ...
}
但是,您不能使用break
您尝试使用它的方式。
相反,我建议您按如下方式构建程序:
if (choice == 1) {
// Code for choice 1
} else {
// Code for choice 2
}
或者,更好的是,将代码拆分成更小的方法并执行
if (choice == 1) {
method1();
} else {
method2();
}
你使用 break 的方式是错误的,我看到这是一个编译问题。您正在 if
块中使用 break
。 break
用于循环 - while
或 for
以跳过重命名迭代。
在这里你可以使用带有标签的goto。但是 goto 不是组织程序流程的推荐方式。更好的是,您可以更改程序的流程。顺便说一下,不要告诉 break 在 java 中不起作用 :),它被使用和测试了数千次。
希望对您有所帮助。
非常感谢
您必须必须使用break
和continue
循环。
示例:
Outer:
for(int i=0;i<5;i++)
{
}
这里有完整的例子,有详细的参考资料
http://www.java-examples.com/java-break-statement-label-example
我制作了这个反转字符串的程序。它可以通过两种方式完成。所以我想问用户首选的方法。为了摆脱 if else
我使用 break 关键字,后跟每个选择的标签。
这个程序在没有 break 和 label 的情况下工作正常,但是在使用 break 时它会出错。
import java.util.Scanner;
public class ReverseString {
public static void main(String[] args) {
System.out.println("Choose a method:");
Scanner ch = new Scanner(System.in);
int choice = ch.nextInt();
if (choice == 1)
{
break first;
}
else
{
break second;
}
first:
Scanner in = new Scanner(System.in);
System.out.print("Enter a string to reverse:");
String original = in.nextLine();
String reverse = "";
int i, length = original.length();
for (i=length-1; i>=0; i--)
{
reverse = reverse + original.charAt(i);
}
System.out.println(reverse);
second:
StringBuilder rev = new StringBuilder(in.nextLine());
String revc = rev.reverse().toString();
System.out.println(revc);
}
}
和错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Syntax error, insert ":: IdentifierOrNew" to complete ReferenceExpression
Syntax error, insert "AssignmentOperator Expression" to complete Assignment
Syntax error, insert ";" to complete Statement
Scanner cannot be resolved to a variable
in cannot be resolved to a variable
in cannot be resolved
Syntax error, insert ":: IdentifierOrNew" to complete ReferenceExpression
Syntax error, insert "AssignmentOperator Expression" to complete Assignment
Syntax error, insert ";" to complete Statement
StringBuilder cannot be resolved to a variable
rev cannot be resolved to a variable
in cannot be resolved
rev cannot be resolved
at welcome.ReverseString.main(ReverseString.java:25)
在Java中,break
(和continue
)主要是在循环中使用,break
在switch
中也有作用。您可以使用 break
来跳出带标签的块,但坦率地说,使用 if
语句这样做意义不大。 (详情见 JLS §14.15。)
与其尝试使用有效的方法 "goto",不如将反转的两种方法放入 方法 ,然后从连接到您的块中调用适当的方法if
和 else
(您目前有 break
)。
您可以在 if 语句中使用 break
,但您必须标记块。看这个例子:
if (choice == 1) first: {
// ...
break first;
// ...
} else second: {
// ...
break second;
// ...
}
但是,您不能使用break
您尝试使用它的方式。
相反,我建议您按如下方式构建程序:
if (choice == 1) {
// Code for choice 1
} else {
// Code for choice 2
}
或者,更好的是,将代码拆分成更小的方法并执行
if (choice == 1) {
method1();
} else {
method2();
}
你使用 break 的方式是错误的,我看到这是一个编译问题。您正在 if
块中使用 break
。 break
用于循环 - while
或 for
以跳过重命名迭代。
在这里你可以使用带有标签的goto。但是 goto 不是组织程序流程的推荐方式。更好的是,您可以更改程序的流程。顺便说一下,不要告诉 break 在 java 中不起作用 :),它被使用和测试了数千次。
希望对您有所帮助。
非常感谢
您必须必须使用break
和continue
循环。
示例:
Outer:
for(int i=0;i<5;i++)
{
}
这里有完整的例子,有详细的参考资料
http://www.java-examples.com/java-break-statement-label-example