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

时间:2014-05-19 06:25:54

标签: java c for-loop iteration

for c in c

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

}

for java循环

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

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

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

为什么会出现这种错误?

2 个答案:

答案 0 :(得分:10)

在C中,0被视为false,其余数字被解释为true。在Java中,这不起作用,因为它的boolean类型不是int,而int无法直接转换为boolean

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

for (i = 0; (i + n) != 0; i--) {
    System.out.println("-\n");
}

虽然可以使用(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");
}

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

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

答案 1 :(得分:3)

C的原始版本没有布尔值,所以每个人都使用整数。该语言将任何非零值解释为true,将零解释为false。

但Java更严格的是什么是布尔值和什么是整数 - 你实际上需要使用布尔表达式(例如i + n != 0)来检查循环是否应该继续。