黑马程序员技术交流社区

标题: 关于死循环的问题如下代码 [打印本页]

作者: 荣凯旋    时间: 2011-12-22 09:52
标题: 关于死循环的问题如下代码
本帖最后由 荣凯旋 于 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呢?
作者: 杨强    时间: 2011-12-22 09: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
明白了不
作者: 袁泽宇    时间: 2011-12-22 10:05
本帖最后由 袁泽宇 于 2011-12-22 10:06 编辑

I是整形

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

要是运行后马上停止就可以看到第一个是0,后面的是1
要是运行的时间略长,停止后拉到第一行看到的是1
作者: 李楠    时间: 2011-12-22 10:06
楼上把过程说的很清楚的了。你的i变量是int类型的,那么你给int类型的变量赋值一个float类型的值,那么会默认执行一个类型转换,int类型转float类型,会直接把小数点后面的值舍去,那么1.1就变成了1.
作者: 房宝彬    时间: 2011-12-22 10:09
懂了,{:soso_e104:}
作者: 闫江龙    时间: 2011-12-22 10:15
   i*=0.1 结果还是取整数部分的 所以打印结果是 0111111111111…… 。但是写成i=i*0.1是不行的 右边提升为double不能在付给int  编译不会通过的
作者: 荣凯旋    时间: 2011-12-22 10:19
明白了 谢谢各位




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