标签不起作用,我尽我所能

时间:2016-10-08 19:26:06

标签: java label binary-search goto

我试过继续&在java中打破标签,但它会抛出错误。

以下是代码:

$ssh->enablePTY(); 
$cmd1 = "passwd ".$info['instanceFtpUser'];
$ssh->exec($cmd1);
echo $ssh->read('password:'); 
$ssh->write($newpass."\n"); 
echo $ssh->read('password:'); 
$ssh->write($newpass."\n");
$ssh->disconnect(); 

2 个答案:

答案 0 :(得分:1)

如果您有3个循环并且需要调用break,则标签将与循环一起使用;在最里面的循环中,你会使用一个标签来打破外部循环,因为如果你只是调用break;它将打破最内层并进入中间循环。您使用标签错误,您可以通过使用if ... if else和else语句或使用switch语句轻松解决您的问题。

答案 1 :(得分:0)

标记break 仅适用于周期。 请注意,它们 goto等效,因为它们在中断周期后将控件转移到下一个语句

这是一个从Oracle网站上的language basics tutorial - break statement复制的示例(如果有其他好的示例,我可能会懒得原创):

public static void main(String[] args) {

        int[][] arrayOfInts = { 
            { 32, 87, 3, 589 },
            { 12, 1076, 2000, 8 },
            { 622, 127, 77, 955 }
        };
        int searchfor = 12;

        int i;
        int j = 0;
        boolean foundIt = false;

    search:
        for (i = 0; i < arrayOfInts.length; i++) {
            for (j = 0; j < arrayOfInts[i].length;j++) {
                if (arrayOfInts[i][j] == searchfor) {
                    foundIt = true;
                    break search;
                }
            }
        }

        if (foundIt) // etc
    }
}

如果您对如何解决二进制搜索感兴趣,而不是如何使用break标签。下面的代码与使用goto的代码具有相同的性能(如果它们实际存在于java中)。

private static int search(int[] seq, int key, int low, int high) {

    while (low <= high) {
        // this is as good as low+(high-low)/2. 
        int mid = (low + high) >>> 1; // this is (low+high)/2

        int midVal = seq[mid];

        if (midVal < key) {
            low = mid + 1;
        }
        else if (midVal > key) {
            high = mid - 1;
        }
        else {
            // why break when you can return?
            return mid; // key found
        }
    }
    // key not found. Return the 2's complement of the insert position:
    // that is -(insertPosition+1)
    return -(low + 1);
}