标准while(true)循环和for(;;)?之间有什么区别?
编译后是否存在或将两者都映射到相同的字节码?
我刚看到这段代码
while 1:
line = data.readline()
if not line:
break
#...
Run Code Online (Sandbox Code Playgroud)
并且认为,必须有一个更好的方法来做到这一点,而不是使用无限循环break.
所以我尝试过:
while line = data.readline():
#...
Run Code Online (Sandbox Code Playgroud)
并且,显然,有一个错误.
有没有办法避免break在那种情况下使用?
理想情况下,你想避免说readline两次......恕我直言,重复甚至比仅仅更糟糕break,特别是如果声明很复杂.
我经常使用这个代码模式:
while(true) {
//do something
if(<some condition>) {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
另一位程序员告诉我,这是不好的做法,我应该用更标准的替换它:
while(!<some condition>) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
他的理由是你可以"轻易地忘记休息"并拥有无限循环.我告诉他,在第二个例子中你可以很容易地放入一个永远不会返回真实的条件,因此很容易有一个无限循环,所以两者都是同样有效的做法.
此外,我经常更喜欢前者,因为当你有多个断点时,即当多个条件退出循环时,它使代码更容易阅读.
任何人都可以通过为一方或另一方添加证据来丰富这一论点吗?
在这个代码示例中,有没有办法从catch块继续外部循环?
while
{
// outer loop
while
{
// inner loop
try
{
throw;
}
catch
{
// how do I continue on the outer loop from here?
continue;
}
}
}
Run Code Online (Sandbox Code Playgroud) 令人惊讶的是,以下代码输出:
/
-1
Run Code Online (Sandbox Code Playgroud)
代码:
public class LoopOutPut {
public static void main(String[] args) {
LoopOutPut loopOutPut = new LoopOutPut();
for (int i = 0; i < 30000; i++) {
loopOutPut.test();
}
}
public void test() {
int i = 8;
while ((i -= 3) > 0) ;
String value = i + "";
if (!value.equals("-1")) {
System.out.println(value);
System.out.println(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了很多次以确定这种情况会发生多少次,但是不幸的是,最终还是不确定的,并且我发现-2的输出有时变成了一个周期。另外,我还尝试了删除while循环并输出-1,而没有任何问题。谁能告诉我为什么?
JDK版本信息:
public class LoopOutPut {
public static void main(String[] args) {
LoopOutPut loopOutPut = new LoopOutPut();
for (int …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚如何打破包含switch语句的循环.断开了开关,而不是循环.
对此可能有更优雅的解决方案.我已经实现了一个标志,该标志以true开头并设置为false并结束循环.你能提供更好的解决方案吗?
背景:此代码用于条形码工作流程系统.我们有内置条形码扫描仪的PocketPC.此代码用于其中一个功能.它会在整个例程中提示用户输入不同的数据.这件作品允许他们滚动显示在PocketPC终端上显示该信息的一些库存记录(分页结果)并允许他们输入"D"表示完成,"Q"表示退出.
这是当前需要改进的C#示例:
do
{
switch (MLTWatcherTCPIP.Get().ToUpper())
{
case "": //scroll/display next inventory location
MLTWatcherTCPIP.TerminalPrompt.ScrollBodyTextDown();
break;
case "P": //scroll/display previous inventory location
MLTWatcherTCPIP.TerminalPrompt.ScrollBodyTextDown();
break;
case "D": //DONE (exit out of this Do Loop)
// break; // this breaks out of the switch, not the loop
// return; // this exists entire method; not what I'm after
keepOnLooping = false;
break;
case "Q": //QUIT (exit out to main menu)
return;
default:
break;
}
} while (keepOnLooping);
Run Code Online (Sandbox Code Playgroud)
这是在VB.NET中执行此操作的代码示例
Do
Select Case …Run Code Online (Sandbox Code Playgroud) 我有一个功课来实现一个简单的测试应用程序,下面是我目前的代码:
import java.util.*;
public class Test{
private static int typing;
public static void main(String argv[]){
Scanner sc = new Scanner(System.in);
System.out.println("Testing starts");
while(sc.hasNextInt()){
typing = sc.nextInt();
switch(typing){
case 0:
break; //Here I want to break the while loop
case 1:
System.out.println("You choosed 1");
break;
case 2:
System.out.println("You choosed 2");
break;
default:
System.out.println("No such choice");
}
}
System.out.println("Test is done");
}
}
Run Code Online (Sandbox Code Playgroud)
我现在要做的是,当0按下时,表示用户想要退出测试,然后我打破while loop并打印Test is done,但它不能那样工作,我知道原因可能是"break"打破了switch,我怎么能让它打破while loop呢?
有什么用途while(1);?我知道while(1)(没有分号)无限循环,类似于自旋锁情况.但是我没看到哪里while(1);可以使用?
if(!condition)
{
while(1);
}
Run Code Online (Sandbox Code Playgroud)
注意:这不是do- while()或简单的情况while(1).
while (temp->left->oper == '+' ||
temp->left->oper == '-' ||
temp->left->oper == '*' ||
temp->left->oper == '/' ||
temp->right->oper == '+' ||
temp->right->oper == '-' ||
temp->right->oper == '*' ||
temp->right->oper == '/')
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
为了清楚起见:temp是一个指向以下node结构的指针:
struct node
{
int num;
char oper;
node* left;
node* right;
};
Run Code Online (Sandbox Code Playgroud) 来自第一次Ruby程序员的非常简单的问题.
你如何在Ruby中循环一段文本?每当遇到换行符时,我想重新启动内循环.
def parse(input)
...
end
Run Code Online (Sandbox Code Playgroud)