Для цикла не оценивается - PullRequest
1 голос
/ 15 декабря 2011

Я не могу понять это.У меня есть следующий код:

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 ]

5 голосов
/ 15 декабря 2011

Ваш цикл завершается, как только 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));
}
2 голосов
/ 15 декабря 2011

Поскольку 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));
    }
1 голос
/ 15 декабря 2011

Условие в цикле for указывает, когда цикл должен остановиться.Вы должны поместить тест для doNotPrintIndex в тело цикла.

0 голосов
/ 15 декабря 2011

Что ж, он должен выполнить цикл один раз :) Вы видите, что цикл for for работает следующим образом: он проверяет условия 1 и 2: i=0, i<x && i!=1 и, если это условие истинно, он входит в фигурные скобки цикла for. После завершения там операций он возвращается и меняет i: i++. Поэтому, когда ваш i == 1, условие 2 ложно, и цикл закончен. Как будто у вас for(i=0; i<3; i++) {...} и после последнего приращения i равно 3. Условие i <3 ложно, поэтому цикл завершен. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...