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转换为布尔
为什么会出现这种错误?
答案 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
)来检查循环是否应该继续。