【问题标题】:Core java for loop with if condition explanation [duplicate]带有if条件说明的核心java for循环[重复]
【发布时间】:2016-05-18 10:43:33
【问题描述】:

嗨,伙计们,当我在程序下面运行时

package com.test;

public class Test1 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int i=5;
     for(;;i++){

        if(i<0){
            System.out.println("Break");
            break;
        }
    }

}

}

输出:中断。

这怎么可能?谁能解释一下

提前致谢。

【问题讨论】:

  • 提示:int 的最大值是多少?如果i 有那个值,那么i++ 执行后它的新值是多少?
  • 称为整数溢出。请参阅this question 了解更多信息。

标签: java if-statement for-loop


【解决方案1】:

如果您将此行添加到您的代码中

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int i=5;
     for(;;i++){
        System.out.println("Current i: " + i);
        if(i<0){
            System.out.println("Break");
            break;
        }
    }

}

您会看到,在Integer.MAX_VALUE 之后,它将从Integer.MIN_VALUE 重新开始,并最终在某个时间达到零。

【讨论】:

  • "你会看到在 Integer.MAX_VALUE 之后它会从 0 开始。"这是不正确的。它跳转到Integer.MIN_VALUE
  • @Turing85 谢谢。你是对的。
【解决方案2】:

我用 5 初始化,循环将迭代直到 int 最大值 +2147483647 之后该值再次从 int 的最低值开始,即 -2147483648,因此如果条件满足并且打印中断,则当负值开始时。

【讨论】:

    【解决方案3】:

    这是数字系统定义中的数字系统定义的情况。(数字电子学和数字系统)。

    任何编程语言都是数字系统,例如 8 位有符号整数是 -128 到 127。

    因此,如果您输入 128,它将被计为 -128。 如果你把 130 算作 -126。

    所以当最大正整数值超过数字时,数字变为负数,条件变为真。 这就是为什么 breakis 出来的原因。

    在循环中插入sop(i),你就明白了。

    【讨论】:

      猜你喜欢
      • 2020-12-26
      • 2015-08-24
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      相关资源
      最近更新 更多