1
 int x = 13; 
 while(x >= 4) { 
 if (x % 2 == 1) { 
 System.out.println(x); 
 } 

 x = x - 3; 
 }

我知道它的输出,它是 13 和 7,有人愿意解释一下它是如何变成 13 和 7 的吗?

4

4 回答 4

2

情况1:

---> x = 13;
     while(true) //  13 >= 4
     if(true)    // 13%2 = 1 which is 1==1  is true
     then print x
     reduce x by 3 // now x ==10

案例2:

---> x = 10;
     while(true) // 10 > =4
     if(false) // 10 % 2 = 0, 0 == 1 is false
     skip
     reduce x by 3// now x == 7

案例3:

---> x =7;
     while(true) // 7 > = 4
     if(true) //7 % 2 ,1==1 is true
     print x;
     reduce x by 3 // x == 4

案例4:

---> x =4;
     while(true) // 4 > = 4
     if(false) //4 % 2 ,0==1 is false
     skip
     reduce x by 3 // x == 4

案例5:

---> x =1;
     while(false) // 7 > = 4
     skip

operator summary :
**%** finds remainder // 如果 RHS 操作数是,则结果未定义0
**>=** greater than or equals

于 2013-04-10T07:01:54.920 回答
2

第一个 x 是 13,是否 >= 然后是 4?是的。进入while循环。是 13%2==1。是的。打印 x(打印 13)。那么 x = x-13,x 变为 10。是 10 >=4 吗?是的。.... 很快。

于 2013-04-10T06:54:56.910 回答
2

13 % 2 = 1因此,您打印13. 现在x = 1010 % 2 = 0,所以你不打印出来10。现在x = 77 % 2 = 1,所以你打印 7. 现在x = 44 % 2 = 0; 现在x = 1,循环停止。

%运算符是模运算符。这会在两个数字相除时打印余数。例如14/3 = 4 remainder 2,所以13 % 4 = 2

于 2013-04-10T06:55:08.380 回答
2

你不明白什么?

在第一次迭代中,x=1313%2=1所以它打印13。秒迭代x=10( x=x-3)10%2=0没有打印任何内容。第三次迭代x=7( 10-3),7%2=1因此打印了 7。

之后, x=4 所以什么都没有打印并x=1退出循环。

于 2013-04-10T06:55:30.377 回答