A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 荣凯旋 黑马帝   /  2011-12-22 09:52  /  2777 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 荣凯旋 于 2011-12-22 10:20 编辑

class ForText8
{
        public static void main(String[] args)
        {
               
                for( int i = 0 ; i < 10 ;i++ )
                {
                        System.out.println(i);
                                i*=0.1 ;
                }
               
               
        }
}
为啥死循环结果是1,而不是0呢?

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

6 个回复

倒序浏览
杨强 黑马帝 2011-12-22 09:57:57
沙发
这要先明确for循环的运行原理 for(变量,条件表达式,循环体结束一次后运行的表达式)
再看你的题 第一次循环i=0 打印 0 ,i*=0.1;  这i=0;第一次循环结束执行 i++
i=1 打印 1;i*=0.1 i=0.1; 第二次循环结束 i++ ; i=1.1 但是i 是int值 所以i=1
明白了不

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 袁泽宇 于 2011-12-22 10:06 编辑

I是整形

第一次打印的是0,后面全部打印1

要是运行后马上停止就可以看到第一个是0,后面的是1
要是运行的时间略长,停止后拉到第一行看到的是1

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
吴上储 + 1
在天 + 1

查看全部评分

回复 使用道具 举报
李楠 黑马帝 2011-12-22 10:06:15
板凳
楼上把过程说的很清楚的了。你的i变量是int类型的,那么你给int类型的变量赋值一个float类型的值,那么会默认执行一个类型转换,int类型转float类型,会直接把小数点后面的值舍去,那么1.1就变成了1.
回复 使用道具 举报
懂了,{:soso_e104:}
回复 使用道具 举报
   i*=0.1 结果还是取整数部分的 所以打印结果是 0111111111111…… 。但是写成i=i*0.1是不行的 右边提升为double不能在付给int  编译不会通过的

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
荣凯旋 黑马帝 2011-12-22 10:19:27
7#
明白了 谢谢各位
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马