如何重新编写或修改此代码以使用相同但不使用break语句

时间:2015-11-23 05:45:50

标签: java break

如何在不使用break语句的情况下获得以下代码?

我更新并将i = child添加到while循环的底部。我还添加了这些额外的评论,因为有人编辑了我的帖子,现在我无法更新它,因为我需要添加更多评论。请不要改变我的问题。这些意见是为了获得额外的见解。它还妨碍了我编辑问题或更新代码的能力。

private void percDown(int [] a, int i, int n) {
    numOfCalls++;
    int child = 0;
    int tmp = a[i];

    while(leftChild(i) < n) {
        child = leftChild(i);
        if( child != n - 1 && a[child] < a[child + 1]){
            numOfComparisons++;
            child++;
        }
        if( tmp < a[child]){
            numOfComparisons++;
            a[i] = a[child];
        }
        else
            break;
        i= child;
        a[i] = tmp; 
    }
}

3 个答案:

答案 0 :(得分:1)

只需设置n = 0;,或Integer.MIN_VALUE,如果这些值可以为负值。这将阻止你的循环。但不要反对break陈述。它们在现实世界中一直被使用。

答案 1 :(得分:0)

条件时尝试此操作:

while(leftChild(i) < n && (( leftChild(i) != n - 1 && a[leftChild(i)] < a[leftChild(i) + 1]) || tmp < a[leftChild(i)]))

基本上我已经在if条件下同时处理了while条件。其他一切都是一样的。

答案 2 :(得分:0)

您的代码结构如下:

while(A) {
    B;
    if(C){
        D;
    } else {
        break;
    }
    E;
}

整理一下;它可以写成

while(A) {
    B;
    if(C){
        D;
        E;
    } else {
        break;
    }
}

为避免使用break,可以通过以下方式完成:

while(A && !C) {
    B;
    if(C){
        D;
        E;
    }
}

(你可以组成一个有意义的布尔标志来表示C,这样它就更具可读性,而不是在条件中放入一个冗长,复杂,难以阅读的谓词。)