javascript для (i = 0; i <XXX.length; i ++) -> длина вопроса - PullRequest
2 голосов
/ 27 мая 2010
for (m = 0; m < troopsCount.length; m++) {

                //FM_log(7,"i="+i+" m="+m);
                //FM_log(7,"tipoTropaPrioritaria[m] = "+tipoTropaPrioritaria[m]);
                //FM_log(7,"troopsCount[m] = "+troopsCount[m]);
                //FM_log(7,"availableTroops[m] = "+availableTroops[m]);

                if ((tipoTropaPrioritaria[m] == null || tipoTropaPrioritaria[m] == "undefined")
|| (troopsCount[m] == null || troopsCount[m] == "undefined") ||
(availableTroops[m] == null || availableTroops[m] == "undefined")) 
                    return "alternaTropas(): ERRO - tipoTropaPrioritaria[m] || troopsCount[m] || availableTroops[m] null ou undefined";

                if ((parseInt(tipoTropaPrioritaria[m]) != 0) && (parseInt(troopsCount[m]) != 0)) {
                    naoServe = true;
                    break;
                }
                else {
                    if ((parseInt(availableTroops[m])) < (parseInt(troopsCount[m]))) {
                        naoServe = true;
                        break;
                    }
                    else if (m < troopsCount.length) {
                        naoServe = true;
                    }
                    else { //means m >= troopsCount.length
                        naoServe = false;
                    }
                }
}

мой вопрос: последнее утверждение

else { //means m >= troopsCount.length
    naoServe = false;
}

будет ли оно когда-либо оценено с

для (m = 0; m

???

Ответы [ 4 ]

2 голосов
/ 27 мая 2010

Нет, это не будет выполнено, при условии, что m и troopsCount не изменены в самом цикле (что в этом примере, похоже, не так).

Как я полагаю, вы указываете, что условие цикла будет препятствовать повторному запуску цикла, если m было больше или равно troopsCount.length в начале цикла.

0 голосов
/ 27 мая 2010

допустим troopsCount.length = 10

когда m = 9, он выполнит весь код в цикле справа, но когда m = 10, он ничего не выполнит.

так что если я изменю это так:

            else {
                if ((parseInt(availableTroops[m])) < (parseInt(troopsCount[m]))) {
                    naoServe = true;
                    break;
                }
                else if (m < (troopsCount.length - 1)) { // troopsCount.length - 1 = 9, m < 9 = m from 0 to 8
                    naoServe = true;
                }
                else { // troopsCount.length = 9
                    naoServe = false;
                }
            }
        }

это будет работать, верно?

0 голосов
/ 27 мая 2010

Нет. Цикл оценивается только до 1001 *. Так что m никогда не будет >= troopsCount.length, пока вы не измените m или troopsCount.length внутри цикла.

0 голосов
/ 27 мая 2010

Неа. Это никогда не должно произойти.

Цикл немедленно останавливается, если m < troopsCount.length ложно. Таким образом, m >= troopsCount.length никогда не будет истинным внутри цикла, если вы не измените его значение внутри самого цикла (чего в этом примере нет).

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