虽然循环,但额外循环即使条件为假

时间:2014-02-26 23:35:04

标签: javascript loops while-loop conditional-statements cycle

我正在使用javascript,但我正在寻找可能适用于多种语言的通用解决方案。

我想要一个运行时间超过预期的while循环。

例如(假设变量如上所述):

while (x != ">") {
    i++;
    tempStr += x;
    x = text[i];
}

因此,上述代码的输出将tempStr的最后一个字符设为">"

要记住的重要一点是,我不是简单地想做这样的事情:

while (x != ">") {
    i++;
    tempStr += x;
    x = text[i];
}
tempStr += x;

以上只是一个例子,在条件为false之后运行while循环一个最后一个循环可能很方便。虽然我不能与你分享我的实际代码(出于法律原因),但要知道上述内容不会是我想到的应用程序的解决方案。

我可能无法做我想做的事情,如果有的话,请告诉我:)。

6 个答案:

答案 0 :(得分:4)

    while(condition || !extraLoopCondition) {
        //The usual stuff
        if(!condition) {
            extraLoopCondition = true;
        }
    }

虽然它不是很有说服力,但它肯定会做你想要的事情

据推测,最后一个周期最后会condition为假

答案 1 :(得分:1)

是的,do ... while()构造在大多数语言中。

http://www.php.net/manual/en/control-structures.do.while.php

<?php
$i = 0;
do {
    echo $i;
} while ($i > 0);
?>

答案 2 :(得分:1)

从Mike的评论中,使用do循环:

var tempStr = '';
var x, i=0;

do {
    x = text[i++];
    tempStr += x;
} while (x != '>')

请注意,您可能应该有一个替代限制,以防止无限循环,以防 x 永远不是“&gt;”,例如

...
while (x != '>' && text[i])

或类似的。还测试通过索引访问字符串字符在所有浏览器中都有效,有些不允许它(较旧的IE)因此可能更好用:

    x = text.substr(i++, 1);

    x = text.charAt(i++);

答案 3 :(得分:1)

你说你之后不想要代码......就像在

中一样
while (x != ">") {
    i++;
    tempStr += x;
    x = text[i];
}
tempStr += x;

但你也说do{}while不起作用,因为条件必须验证..但是.. 如果必须验证条件意味着你在循环之外的代码..但之前..你的样本只有在代码是这样的时才有效

x = text[i=0];
while (x != ">") {
    i++;
    tempStr += x;
    x = text[i];
}

所以我真的没有看到在循环之外有代码的问题..你不能避免它,除非你做一些非正统的代码,如

for(x = text[i=0];(tempStr = tempStr +x).substring(tempStr.length-1) != ">";x = text[i])  
    i++

但这是最糟糕的(最痛苦的)解决方案..无论出现什么问题...... 任何方式..当我做解析或字符串操作,我需要追加最后一个字符 通常我的代码都是这样的

for(var i=0;text.length>0;i++)
{
    var x = text[i]; //get the char
    tempStr += x;//do somthing..like..append
    if(x==">")//is the last one admissible
        break;
}

答案 4 :(得分:0)

实际上,我只想到了一些东西。但是还没有测试过。 (esdebon也建议这个,我在发布之前没看到它)

if (x != ">") {
    do {
        i++;
        tempStr += x;
        x = text[i];
    }
    while (x != ">")
}

答案 5 :(得分:0)

这是否符合您的要求?

if( x != ">" ) tempStr += x;
while (x != ">") {
    x = text[++i];
    tempStr += x;   
}

如果tempStr不等于>,这会将x的最后一个字符保留为'>'