【问题标题】:Is there any difference between for loop in java and c?java和c中的for循环有什么区别吗?
【发布时间】:2014-07-07 00:17:33
【问题描述】:

c 中的 for 循环

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

}

java中的for循环

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

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

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

为什么会出现这种错误?

【问题讨论】:

  • 你不必在循环前声明 i
  • @DnR 为什么我需要它?仅当我必须在循环后访问 i 而他没有。顺便说一句,我也不了解他的休息条件。在java中从未见过。但已经有了答案
  • @ZerO i 在循环开始后访问。像这样声明i 而不是for (int i = 0; i + n; i--) 是没有错的
  • 我只是尝试在循环之前没有声明 i。但它不起作用..
  • 在 C 的原始版本中,你不能写 for (int i = 0;... - 你必须在之前声明它。我认为 C 已经被更新为允许这种结构,但我不确定,因为我已经有很多年没有用 C 编程了。

标签: java c for-loop iteration


【解决方案1】:

在 C 中,0 被认为是 false,其余数字被解释为 true。在 Java 中,这是行不通的,因为它有一个不是 intboolean 类型,而且 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 值,下溢到@987654336 @ 并转到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");
}

【讨论】:

  • 在 C 中,我相信任何 非零 值都是真的(不仅仅是正数)
  • 在 C 中也建议将控制语句保持为“有效”布尔值。因此,不仅应更正此处所示的 Java 代码,还应更正 C 代码!例如,这是 MISRA-C 所要求的。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2011-04-01
    • 2014-01-24
    • 1970-01-01
    相关资源
    最近更新 更多