While循环,即使条件为假也会额外循环

6

我正在使用JavaScript,但我正在寻找一种通用解决方案,可以适用于多种编程语言。

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

例如(假设变量在上面已经定义):

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

上述代码的输出将使tempStr的最后一个字符成为">"。记住重要的是,我不仅仅是想做这样的事情:
while (x != ">") {
    i++;
    tempStr += x;
    x = text[i];
}
tempStr += x;

上面只是一个例子,当while循环条件为假时,运行最后一次循环可能很方便。虽然出于法律原因无法与您分享我的实际代码,但请知道上述内容不适用于我考虑的应用程序。
如果无法实现我正在尝试的操作,请告诉我 :)

我认为你的条件应该进行调整,这样当它为假时,就不需要再运行一次了。 - Corey Ogburn
5
使用“do循环”是否可行? - Mike Christensen
2
你可以使用“if”和“do循环”。 - esdebon
1
也许是一个包含初始条件的 if 语句的 do 循环 - Mike Christensen
1
@esdebon - 嘿,你赢了! - Mike Christensen
显示剩余2条评论
6个回答

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

虽然它不是很雄辩,但它绝对能做到你想要的。

可以预设最后一个周期的条件在结束时为false。


1
应该是 || 吧? - zerkms
дҪҝз”ЁwhileеҫӘзҺҜе’Ң||д»ҘеҸҠifиҜӯеҸҘеҶ…йғЁпјҢиҝҳжҳҜе°ҶifиҜӯеҸҘж”ҫеңЁеӨ–йқўе№¶еңЁifиҜӯеҸҘдёӯдҪҝз”Ёdo whileпјҢе“Әз§Қж–№ејҸжӣҙй«ҳж•Ҳпјҹ - heckascript
我以为你在OP中说过,不能让代码在while循环之外运行。如果不是这样,那么你发布的第二件事有什么问题? - user70585

1

1
do...while 在循环开始时执行一次代码,而不是在结束时。 - user70585
正如你可以从用户对自己问题的回答中看到的那样,那是不相关的。 - krowe

1

从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);

or

    x = text.charAt(i++);

一个do循环不起作用,因为即使条件为假,它也会执行一次。我想要在条件满足时才开始循环,并在最后多运行一次。 - heckascript
那么你应该在问题中明确说明。你需要两个测试——一个用于启动循环,另一个用于停止它。没有if..while循环,但你可以在if内嵌套一个while - RobG

1

你说你不想在while后面写代码...就像这样

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

0

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

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

如果你现在选择自己的答案,那就太糟糕了。这里有10个人知道该怎么做。你只是直到它回答了你问题中不清楚的部分才选择它。 - krowe

0

这符合您的要求吗?

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接