黑马程序员技术交流社区

标题: 循环 中的问题, 谢谢额 [打印本页]

作者: yekong262    时间: 2014-1-6 10:05
标题: 循环 中的问题, 谢谢额
  1. int temp = 120;
  2.                  int sum = 0;
  3.                 while(temp != 0){
  4.                         sum = sum*10 + temp%10;
  5.                                                 temp = temp/10;

  6.                         }
  7.                                                 System.out.println(sum+";");
复制代码
结果是21 是怎么运算的  顺序是什么 谢谢 ,
作者: 王新年    时间: 2014-1-6 10:59
首先判断temp的值等不等与0,不等则计算sum=sum*10+temp%10;在把temp/10的值赋值给temp,然后再判断temp的值等不等于0,重复上述动作直到temp的值等于0退出while循环,打印出sum的值
作者: 猎鹰tianya    时间: 2014-1-6 11:12
本帖最后由 猎鹰tianya 于 2014-1-6 11:25 编辑
由于之循环了三次,所以过程不难写,我写了整个过程,希望对你理解程序有帮助,不多说,请看图:
[attach]33931[/attach]

截图2014-1-6_11-8-4.png (142.8 KB, 下载次数: 9)

截图2014-1-6_11-8-4.png

作者: 胡永城    时间: 2014-1-6 11:15
  1. <b><font size="4"> int temp = 120;
  2. int sum = 0;
  3. while(temp != 0){
  4. sum = sum*10 + temp%10;
  5. temp = temp/10;
  6. }
  7. System.out.println(sum+";");</font></b>
复制代码

总共循环了三次。

第一次,temp=120 != 0,
执行循环。
sum*10=0。temp%10=0。所以sum=0。
temp/10=12。所以temp=12。
第二次循环temp=12!=0,
执行循环。
sum*10=0。temp%10=2。所以sum=2。
temp/10=1。所以temp=1。
第三次循环temp=1!=0,
执行循环。
sum*10=20。temp%10=1。所以sum=21。temp/10=0。所以temp=0。temp=0满足不满足条件,循环停止System.out.println(sum+";");输出21.
ps:%是取余运算,保留余数。/是除法运算,保留商。


作者: jibenwujie    时间: 2014-1-6 11:22
程序执行第一次循环:
  1. sum = sum*10 + temp%10;
  2.                 //sum = 0*10 + 120%10(0) = 0
  3.                 temp = temp/10;
  4.                 //temp = 120/10 = 12;
复制代码

程序第二次循环:
  1. sum = sum*10 + temp%10;
  2.                 //sum = 0*10 + 12%10(2) = 2
  3.                 temp = temp/10;
  4.                 //temp = 12/10 = (int)1.2 = 1;
复制代码
第三次循环:
  1. sum = sum*10 + temp%10;
  2.                 //sum = 2*10 + 1%10(1) = 21
  3.                 temp = temp/10;
  4.                 //temp = 1/10 = (int)0.1 = 0;
复制代码
此时程序在此进入循环时,因为temp为0,不满足循环条件,程序结束,sum==21




作者: 范晓冲    时间: 2014-1-6 16:04
本帖最后由 范晓冲 于 2014-1-6 16:43 编辑

  当程序执行到03行时,首先进行判断:temp=120!=0符合条件
=>于是执行04行:sum=sum*10+temp%10=0*10+120%10=0+0=0;
=>执行05行程序:temp=temp/10=120/10=12;


=>再次执行03行,再次进行判断:temp=12!=0,返回值是true
=>于是再次执行04行:sum=sum*10+temp%10=0*10+12%10=0+2=2;
=>于是再次执行05行:temp=temp/10=12/10=1


=>程序再次回到03行,再次对条件进行判断:temp=1!=0,返回值是true,符合条件
=>于是再次执行04行:sum=sum*10+temp%10=2*10+1%10=20+1=21;
=>于是再次执行05行:temp=temp/10=1/10=0;






=>程序再次回到03行,再次对条件进行判断:temp=0,返回值是false,不符合条件


=>程序跳出while循环,执行08行,输出内容为:21;






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2