java和c中的for循环有什么区别吗?

San*_*ana 3 c java iteration for-loop

for c in c

int i;
int n = 20;
for(i = 0; i + n; i-- ) {
     printf("-\n");

}
Run Code Online (Sandbox Code Playgroud)

for循环在java中

int i;
int n=20;
for (i = 0; i + n; i--) {
   System.out.println("-\n");
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,循环在c中工作正常(将打印" - "20次).但是在java中循环显示错误为

线程"main"中的异常java.lang.Error:未解决的编译问题:类型不匹配:无法从int转换为boolean

为什么会出现这种错误?

Lui*_*oza 10

在C中,0考虑false并将其余数字解释为true.在Java中,这不起作用,因为它具有不是a的boolean类型int,并且int不能直接转换为a boolean.

要修复Java代码,您应该将第二部分写为boolean表达式:

for (i = 0; (i + n) != 0; i--) {
    System.out.println("-\n");
}
Run Code Online (Sandbox Code Playgroud)

虽然(i + n) != 0可能会工作,但我更愿意使用(i + n) > 0,因为如果n开始-1,这个循环将工作,直到i下降到Integer.MIN_VALUE值,下溢到Integer.MAX_VALUE下来1.为了防止这种行为(如果是不希望的话),最好像这样写:

for (i = 0; (i + n) > 0; i--) {
    System.out.println("-\n");
}
Run Code Online (Sandbox Code Playgroud)

从@ Lundin的评论看来,你的C代码看起来也应该修复:

//or use my proposed fix by using > rather than !=
for(i = 0; (i + n) != 0; i-- ) {
    printf("-\n");
}
Run Code Online (Sandbox Code Playgroud)

  • 在C中,我相信任何*非零*值都是正确的(不只是正数) (4认同)