为了账号安全,请及时绑定邮箱和手机立即绑定

!= Java for 循环中的运算符

!= Java for 循环中的运算符

DIEA 2021-09-12 20:20:25
下面的代码怎么会打印“J 的值是:1000”?我会认为“j != 1000”在所有情况下都会评估为假(因为 1000 mod 19 不是 0),因此使其成为无限循环。public static void loop2() {    int j = 0;    for(int i=0;j != 1000;i++) {        j = j+19;    }    System.out.println("The value of J is: " + j);}
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

java中int的最大值是2,147,483,647将19加到j上,一次又一次,这个值会被传递。之后它将再次从 int 的最小值开始,即-2,147,483,648。


这将一直持续到 j 的值在某个时刻变为 1000。因此,循环将停止。


j将在整数的最大值上迭代 17 次以达到这一点。检查代码:


public class Solution {

    public static void main(String args[]) {

        int j = 0;

        int iterationCount = 0;


        for(int i=0;j != 1000;i++) {

            j = j+19;

            if(j - 19 > 0 && j < 0) {

                iterationCount ++;

            }


        }

        System.out.println("The value of J is: " + j + " iterationCount: " + iterationCount);

    }

}

输出:


The value of J is: 1000 iterationCount: 17


查看完整回答
反对 回复 2021-09-12
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

像这样扫描溢出:


public static void main(String[] args) {

  int j = 0;

  for(int i=0;j != 1000;i++) {

    j = j+19;

    if(j < Integer.MIN_VALUE+19){

      System.out.println("overflow");

    }

  }

  System.out.println("The value of J is: " + j);

}

印刷


溢出

溢出

溢出

溢出

溢出

溢出

溢出

溢出

溢出

溢出

溢出

溢出

溢出

溢出

溢出

溢出

溢出

J的值为:1000

这意味着 j 溢出 17 次,直到增量 19 最终达到 1000。


查看完整回答
反对 回复 2021-09-12
?
慕仙森

TA贡献1827条经验 获得超7个赞

正如 Saheb 所说,这是由于整数溢出造成的。


在 3842865528 次迭代后达到 J 的值 1000


public static void loop2()

{

    int j = 0;

    long iterations = 0;


    for (int i = 0; j != 1000; i++) {

        j = j + 19;

        iterations++;

    }

    System.out.println("The value of J is: " + j + " reached after " + iterations + " iterations");

}


查看完整回答
反对 回复 2021-09-12
  • 3 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信