break和continue在Java中不起作用

时间:2015-03-05 09:38:21

标签: java break

我制作了这个反转字符串的程序。它可以通过两种方式完成。所以我想问用户首选的方法。为了摆脱if else我使用break关键字,后跟每个选项的标签。

这个程序在没有中断和标签的情况下工作正常但是在使用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)

4 个答案:

答案 0 :(得分:6)

在Java中,break(和continue)主要用于循环,break也在switch中有作用。您可以使用break打破标记的块,但坦率地说,使用if语句执行此操作并不合理。 (JLS §14.15中的详细信息。)

不要试图使用有效的" goto",而是将两种反转方法放入方法,然后从连接到{{{>的块中调用适当的方法。 1}}和if(您当前拥有else)。

答案 1 :(得分:4)

可以在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();
}

答案 2 :(得分:0)

你使用break的方式是错误的,这是我看到的编译问题。您在break块中使用ifbreak用于循环 - whilefor以跳过重命名迭代。

在这里你可以使用goto标签。但是goto不是一种组织程序流程的推荐方法。您可以更好地改变程序的流程。顺便说一句,不要告诉break在java :)中不起作用,它正在被使用和测试数千次。

希望它会有所帮助。
非常感谢

答案 3 :(得分:-1)

必须必须使用breakcontinue圈。

示例:

Outer:
       for(int i=0;i<5;i++)
       {

       }

以下是详细示例以获取更多参考资料

http://www.java-examples.com/java-break-statement-label-example