我对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
答案 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;所以循环体被跳过。