[英]Function returns correctly, but times out in while loop even though condition eventually becomes false
[英]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.