对于循环不评估

时间:2011-12-14 20:39:10

标签: java loops

我无法弄清楚这一点。我有以下代码:

import java.util.ArrayList;
import java.util.List;


public class TestLoop {
    public static List<String> strArray = new ArrayList<String>();

    static {
        strArray.add("Some");
        strArray.add("Silly");
        strArray.add("String");
    }

    public static void main(String[] args) {
        int doNotPrintIndex = 1;
        int beginIndex = doNotPrintIndex == 0 ? 1 : 0;
        for (int i = beginIndex; i < strArray.size() && i != doNotPrintIndex; i++) {
            System.out.println(strArray.get(i));
        }
    }

}

基本上,如果我有ArrayList,我绝不想打印doNotPrintIndex内索引“ArrayList”处存储的内容。但是,在以下情况中,循环仅执行一次。我的逻辑中有什么问题吗?

4 个答案:

答案 0 :(得分:5)

i点击doNotPrintIndex后,您的循环就会退出。试试这个循环:

for (int i = beginIndex; i < strArray.size(); i++) {
    if (i != doNotPrintIndex) {
         System.out.println(strArray.get(i));
    }
}

或者,您可以一个接一个地使用两个循环:

for (int i = beginIndex; i < doNotPrintIndex; i++) {
     System.out.println(strArray.get(i));
}

for (int i = doNotPrintIndex + 1; i < strArray.size(); i++) {
     System.out.println(strArray.get(i));
}

答案 1 :(得分:2)

因为beginIndex为0且doNotPrintIndex为1,所以在1次迭代后,i == doNotPrintIndex并且循环停止。你需要从for循环中删除它并在循环中使它成为if语句:

    for (int i = beginIndex; i < strArray.size(); i++) {
        if(i != doNotPrintIndex)
            System.out.println(strArray.get(i));
    }

答案 2 :(得分:1)

for循环中的条件指示循环何时应该停止。您应该将doNotPrintIndex的测试放入循环体中。

答案 3 :(得分:0)

好吧,它应该循环一次:)你看,在你的for循环中这样工作:它检查条件1和2:i=0, i<x && i!=1如果这个条件为真,它会进入for循环括号内。在完成那里的操作之后,它会回来并改变我:i++。 因此当你的i == 1时,条件2为假,循环结束。这就像你有for(i=0; i<3; i++) {...}并且在最后一次增量之后i等于3.条件i&lt; 3是假的,所以循环结束。