for (;;) {
//Something to be done repeatedly
}
Run Code Online (Sandbox Code Playgroud)
我已经看到这种东西使用了很多,但我觉得它很奇怪......说再说清楚while(true),还是沿着这些方向做些什么?
我猜这(因为许多程序员采用神秘的代码的原因)这是一个微小的利润更快?
为什么,它真的值得吗?如果是这样,为什么不这样定义它:
#define while(true) for(;;)
Run Code Online (Sandbox Code Playgroud)
这基本上是我想要的批处理文件.每当我按任意键超过"暂停"时,我希望能够重新运行"Do Stuff".
while(true){
Do Stuff
Pause
}
Run Code Online (Sandbox Code Playgroud)
看起来只有for循环可用且while批处理中没有循环.那么如何创建一个无限循环呢?
是否存在可以产生无限元素的直接生成器表达式?
这是一个纯粹的理论问题.这里不需要"实用"的答案:)
例如,很容易制作一个有限的发电机:
my_gen = (0 for i in xrange(42))
Run Code Online (Sandbox Code Playgroud)
但是,要创建一个无限的,我需要使用伪造的函数"污染"我的命名空间:
def _my_gen():
while True:
yield 0
my_gen = _my_gen()
Run Code Online (Sandbox Code Playgroud)
在单独的文件中执行操作并在import以后执行操作不计算在内.
我也知道这就是itertools.repeat这个.我很好奇是否有一个没有它的单线解决方案.
回到我的C/C++时代,将"无限循环"编码为
while (true)
Run Code Online (Sandbox Code Playgroud)
感觉更自然,对我来说似乎更明显,而不是
for (;;)
Run Code Online (Sandbox Code Playgroud)
在1980年代后期与PC-lint的相遇以及随后的最佳实践讨论让我想起了这种习惯.我已经使用for控制语句对循环进行了编码.今天,很长一段时间以来,也许我第一次需要作为C#开发人员的无限循环,我面临同样的情况.其中一个是正确的而另一个不是吗?
我有一个EditText带有客户文本观察器的字段.在一段代码中,我需要更改我使用的EditText中的值.setText("whatever").
问题是,一旦我进行了更改,afterTextChanged调用的方法就会创建一个无限循环.如何在不触发afterTextChanged的情况下更改文本?
我需要在afterTextChanged方法中的文本,所以不建议删除TextWatcher.
我有一个简单的代码,应该是一个无限循环,因为x它将一直在增长,并将永远保持大于j.
int x = 5;
int y = 9;
for (int j = 0; j < x; j++) {
x = x + y;
}
System.out.println(y);
Run Code Online (Sandbox Code Playgroud)
但就像它一样,它打印y并且不会无休止地循环.我无法弄清楚为什么.但是,当我按以下方式调整代码时:
int x = 5;
int y = 9;
for (int j = 0; j < x; j++) {
x = x + y;
System.out.println(y);
}
System.out.println(y);
Run Code Online (Sandbox Code Playgroud)
它变成了无限循环,我不明白为什么.java是否认识到它是无限循环并在第一种情况下跳过它但是必须在第二种情况下执行方法调用,以便它按预期运行?困惑:)
我想知道JavaScript while语句(在Chrome控制台中)可以在几毫秒内递增一个变量多少次,所以我很快将这个片段直接写入控制台:
var run = true, i = 0;
setTimeout(function(){ run = false; }, 1);
while(run){ i++; }
Run Code Online (Sandbox Code Playgroud)
问题是它会永远运行.
为什么会发生这种情况,我该如何解决?
我需要在无限循环中永远运行我的Python程序.
目前我正在运行它 -
#!/usr/bin/python
import time
# some python code that I want
# to keep on running
# Is this the right way to run the python program forever?
# And do I even need this time.sleep call?
while True:
time.sleep(5)
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?或者我甚至需要time.sleep打电话?有什么想法吗?
TL; TR
当我问这个问题时,我假设a StackOverflowException是一种阻止应用程序无限运行的机制.这不是真的.
A StackOverflowException未被检测到.
当堆栈没有分配更多内存的容量时抛出它.
[原始问题:]
这是一个普遍的问题,每个编程语言可能有不同的答案.
我不确定C#以外的语言如何处理堆栈溢出.
我今天经历了例外,并一直在思考如何StackOverflowException检测到它.我相信不可能说fe是否深度为1000次调用,然后抛出异常.因为在某些情况下,正确的逻辑可能会那么深.
在我的程序中检测无限循环的逻辑是什么?
StackOverflowExceptionclass:
https://msdn.microsoft.com/de-de/library/system.stackoverflowexception%28v=vs.110%29.aspx类文档中
提到的交叉引用StackOverflowException:https:
//msdn.microsoft.com/de -de /库/ system.reflection.emit.opcodes.localloc(v = vs.110)的.aspx
我刚刚在stack-overflow这个问题上添加了标记,并且描述说当调用堆栈消耗太多内存时它会被抛出.这是否意味着调用堆栈是我的程序的当前执行位置的某种路径,如果它不能存储更多的路径信息,那么抛出异常?
我想知道为什么Java中允许以下代码,而不会出现编译错误?在我看来,此代码通过不返回任何内容来中断方法签名String.有人可以解释我在这里缺少的东西吗?
public class Loop {
private String withoutReturnStatement() {
while(true) {}
}
public static void main(String[] a) {
new Loop().withoutReturnStatement();
}
}
Run Code Online (Sandbox Code Playgroud) infinite-loop ×10
java ×3
c# ×2
python ×2
android ×1
batch-file ×1
c ×1
c++ ×1
compilation ×1
for-loop ×1
generator ×1
iterator ×1
javascript ×1
loops ×1
optimization ×1
readability ×1