如何使用嵌套的if / else if打破我的行为?

时间:2012-12-05 12:46:53

标签: java if-statement break do-while

这是我的代码,但我不得不承认我已经变得有点代码盲目,似乎无法看到问题,尽管我觉得这很容易。任何帮助将非常感激。提前谢谢。

   do{
        System.out.println("Command:");
        scan = new Scanner (System.in);

        String line;                        

        line = scan.nextLine();

        String[]SplitUpText;

        SplitUpText=line.split(" ");

        Command = SplitUpText[0];

        int param1=-1, param2=-1;

        if (Command.compareTo("move")==0)
        {
            if (SplitUpText.length>1)
            {
                param1=Integer.parseInt(SplitUpText[1]);
                if(SplitUpText.length>2)
                {
                    param2=Integer.parseInt(SplitUpText[2]);
                }
            }g.moveTo (param1, param2);


        }else if(Command.compareTo("circle")==0){

            if (SplitUpText.length>1)
            {
                param1=Integer.parseInt(SplitUpText[1]);
            }g.circle (param1);
        }else if(Command.compareTo("line")==0){
            if (SplitUpText.length>1)
            {
                param1=Integer.parseInt(SplitUpText[1]);
                if(SplitUpText.length>2)
                {
                    param2=Integer.parseInt(SplitUpText[2]);
                }
            }g.lineTo (param1, param2);
        } else {
            System.out.println("Invalid Command");
        }

    } while (Command.compareTo ("end")!=0);

2 个答案:

答案 0 :(得分:2)

通常最好的做法是避免它(通过向while表达式添加条件),但如果要提前结束循环,可以使用break;

这是一个更简单的例子:

int i;

i = 0;
do {
    ++i;
    System.out.println("Before: " + i);
    if (someSpecialCondition) {
        break;
    }
    System.out.println("After: " + i);
}
while (i < 5);

假设当i刚刚成为3时出现特殊情况,输出将为:

Before: 1
After: 1
Before: 2
After: 2
Before: 3

注意break如何终止循环。它可以用于各种循环(do..whilewhile和两种for)。

如果您有嵌套循环并且需要从内部循环中断掉外部循环,则应该将该代码重构为子方法。但是,如果您不想重构,可以使用定向 break

int i, j;

outerLoop: for (i = 0; i < 5; ++i) {
    for (j = 0; j < 5; ++j) {
        if (i == 2 && j == 2) {
            break outerLoop;
        }
    }
}

在那里,outerLoop标记外部循环,break outerLoop导致内部循环和外部循环终止。但是,如果你这样做,可能是重构的时候了。

来自JLS的更多内容:http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.15

答案 1 :(得分:0)

考虑使用break语句。