不在for循环中执行第二个条件

时间:2016-01-11 22:17:54

标签: java android

我对for循环中的某些东西很奇怪。如果我调用setCurrentId(1),那么generateid将返回0(返回语句在for循环中执行)。再次,如果我用setCurrentId(2)调用它返回0(返回语句执行外部for循环),这是不应该的。

我有一个配置文件ArrayList,之前用id 1,2,3,4创建。所以我现在用这些id检查随机id。但是在for循环中它只执行第一次。

public void setCurrentId(int id) {

    Log.d("status scd :", "scI a " + id);
    this.current_id = GenerateId(id);
    Log.d("status scd :", "scI b " + this.current_id);

}

public int GenerateId(int profile_id) {
    if (AppController.getInstance().getProfile() != null) {
        Log.d("status scd :", "GI  ");
        for (int i = 0; i < AppController.getInstance().getProfile().size() && AppController.getInstance().getProfile().get(i).getId() == profile_id; i++) {

            return i;
        }
    }
    return 0;
}

日志结果是:

status scd :: scI a 1
status scd :: GI  
status scd :: scI b 0
status scd :: scI a 2
status scd :: GI  
status scd :: scI b 0

所以,我调试并发现第一次调用setCurrentId()后第二个条件没有执行。

当我将第二个条件置于内部时,如果它可以正常工作。但不知道为什么会发生这种情况。所以,我很想知道这件事。

这里是更正后的代码:

   public void setCurrentId(int id) {
    Log.d("status scd :", "scI a " + id);
    this.current_id = GenerateId(id);
    Log.d("status scd :", "scI b " + this.current_id);
}

public int GenerateId(int profile_id) {
    if (AppController.getInstance().getProfile() != null) {
        Log.d("status scd :", "GI  ");
        for (int i = 0; i < AppController.getInstance().getProfile().size(); i++) {
            if (AppController.getInstance().getProfile().get(i).getId() == profile_id) {
                return i;
            }
        }
    }
    return 0;
}  

日志结果:

status scd :: scI a 1
status scd :: GI  
status scd :: scI b 0
status scd :: scI a 2
status scd :: GI  
status scd :: scI b 1

2 个答案:

答案 0 :(得分:1)

您在For循环中的条件是AND(&amp;&amp;)。第一个循环查找条件为true以进行迭代,因为它为false,所以省略了循环。

对于for循环中的任何多个条件,只能使用True功能进行迭代。在你的第二个代码片段循环条件为真,直到i&lt;配置文件列表的大小,因此循环被触发。

@skyman语句 for循环中的条件意味着'当为true时',因此跳过循环体。这是正确的。

最好是实时查看第二个代码段。原因是异常处理。此外,我在您的代码段中看到的约定仅供您参考。Java Conventions

答案 1 :(得分:0)

对于第一个配置文件项,

AppController.getInstance().getProfile().get(i).getId() == profile_id可能为false,因此您不会进入循环并返回0。

for循环中的条件意味着&#39;当真实时&#39;所以循环体被跳过。