这段代码的流程是什么?

时间:2017-06-22 13:56:22

标签: java android break continue

我很难理解这段代码,continue语句让我感到困惑。

请注意,activityArray是字符串数组,而paramUserInfo.ActivityLevel返回一些String

private float calculateWater(UserInfo paramUserInfo)
{
    int i = 0;
    int j = 0;

    if (paramUserInfo.ActivityLevel.equals(this.activityArray[0])) {
        i = 0;
    }

    for (;;){
       try{ 
            int k = Integer.parseInt(this.weight.getText().toString().trim().trim());
            j = k;
        }
        catch (Exception localException){     
            continue; 
        }

        if (!paramUserInfo.Unit.equals("Kgs")) {
            continue; 
        }
        return (j * 2.202F * 2.0F / 3.0F + i * 0.0338F) * 29.57F;

        if (paramUserInfo.ActivityLevel.equals(this.activityArray[1])) {
            i = 175;
        } else if (paramUserInfo.ActivityLevel.equals(this.activityArray[2])) {
            i = 530;
        } else if (paramUserInfo.ActivityLevel.equals(this.activityArray[3])) {
            i = 700; 
        }   
    }

    return (int)j * 2 / 3 + i * 0.0338F; 
}

2 个答案:

答案 0 :(得分:0)

Continue用于跳过当前迭代并继续下一步。

enter image description here

因此,请将此部分代码作为示例:

try{ 
    int k = Integer.parseInt(this.weight.getText().toString().trim().trim());
    j = k;
}
catch (Exception localException){     
    continue; //Do not execute anything else, go to next iteration.
}

如果捕获到异常,它将忽略它并简单地移动到下一次迭代。

你必须非常小心,因为这个无限的for循环,因此for(;;)没有时间呼吸。如果您试图在主线程上运行这段代码,它将崩溃。

如果您希望它快速运行,请包含Thread.sleep(0,2),并确保它在自己的线程上运行。

除此之外,此代码还有很多问题。

1 - 最后一个return语句永远不会执行,因为break中没有for-loop; break让你走出循环。因此,return (int)j * 2 / 3 + i * 0.0338F;无法执行。

2 - 无需像在此处trim()那样拨打int k = Integer.parseInt(this.weight.getText().toString().trim().trim());两次。

3 - 进行字符串比较时,请使用compareToIgnoreCase()代替equalsparamUserInfo.ActivityLevel.equals(this.activityArray[1])。像这样, paramUserInfo.ActivityLevel.compareToIngoreCase(this.activityArray[1]) == 0

4 - 处理异常处理时,尽量不要全部捕获。在上面的示例中,您只需抓取NumberFormatException而不是ExceptionRead this!

答案 1 :(得分:0)

如果程序读取继续代码,那么程序将返回到(;;)

的开头

如果继续代码有效,此部分将无效

return (j * 2.202F * 2.0F / 3.0F + i * 0.0338F) * 29.57F;

    if (paramUserInfo.ActivityLevel.equals(this.activityArray[1])) {
        i = 175;
    } else if (paramUserInfo.ActivityLevel.equals(this.activityArray[2])) {
        i = 530;
    } else if (paramUserInfo.ActivityLevel.equals(this.activityArray[3])) {
        i = 700; 
    }