繁体   English   中英

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

[英]While loop, extra loop even though condition is false

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

我想要一个比它应该运行一次的while循环。

例如(假设变量如上定义):

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

所以上面代码的输出会使tempStr的最后一个字符为">"

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

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

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

可能无法做我想做的事情,如果是这样,请告诉我:)

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

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

据推测,在最后一个周期会有condition是在其末端假

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

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

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

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

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

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

请注意,如果x从不“>”,您可能应该有一个替代限制来防止无限循环,例如

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

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

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

要么

    x = text.charAt(i++);

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

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++

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

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;
}

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

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

这符合您的要求吗?

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

如果x不等于'>'则会将tempStr的最后一个字符tempStr>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM