一个for循环小问题

qq292487069 2011-05-31 08:53:29
double sum = 0;
double a = 0;
for (int i = 0; ; i++)
{
sum += a;
if (a == 1.00)
{
break;
}
a += 0.01;
}
System.out.println(sum);

为什么显示不出结果??
...全文
83 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq292487069 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 thebluesky_ 的回复:]
Java code

public class Test
{
float sum = 0;
for (int float = 0.01f; i <= 10.f; i += 0.01f)
{
sum += i;
}
System.out.println(sum);



试试吧!
[/Quote]

非常感谢,OK了!

不过是i<= 1.0f不是10f,

O(∩_∩)O哈哈~
TheBlueSky_ 2011-05-31
  • 打赏
  • 举报
回复

public class Test
{
float sum = 0;
for (int float = 0.01f; i <= 10.f; i += 0.01f)
{
sum += i;
}
System.out.println(sum);


试试吧!
bennyraul 2011-05-31
  • 打赏
  • 举报
回复
不知道你什么时候想跳出for循环,至少给个判断条件呗
[Quote=引用 8 楼 qq292487069 的回复:]
引用 5 楼 bennyraul 的回复:
lz你这里a定义的是double类型
a += 0.01永远不会等于1.00
你自己把a打印出来就明白了

Java code

public class TestFloat {

public static void main(String[] args) {
double sum = 0;
double a = 0;
……
……
[/Quote]
李云top 2011-05-31
  • 打赏
  • 举报
回复
这个问题还真的是没有遇见过,貌似好简单的问题
qq292487069 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bennyraul 的回复:]
lz你这里a定义的是double类型
a += 0.01永远不会等于1.00
你自己把a打印出来就明白了

Java code

public class TestFloat {

public static void main(String[] args) {
double sum = 0;
double a = 0;
……
[/Quote]

非常感激您指出了我的错误,

可是,如何解决这个问题呢???
qq292487069 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jiangqq781931404 的回复:]
这写法也太不规范了吧 直接进入死循环了。。。。 double 类型 转换a==1.00?还值得商榷
[/Quote]
非常感激您指出了我的错误,

可是,如何解决这个问题呢???
qq292487069 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fkanf 的回复:]
应该是精度问题,二进制有时候不能精确表示的
if里面的可以这样写:
if(Math.abs(a-1.00)<10e-5)

另外,你的书写习惯不太好,这个i有什么用?直接for(;;)或者while(true),或者将a放进for里面
[/Quote]

惭愧,在下从学Java开始不到3个月,

不懂之处颇多,多谢指点了!
bennyraul 2011-05-31
  • 打赏
  • 举报
回复
lz你这里a定义的是double类型
a += 0.01永远不会等于1.00
你自己把a打印出来就明白了

public class TestFloat {

public static void main(String[] args) {
double sum = 0;
double a = 0;
for (int i = 0;; i++) {
sum += a;
System.out.println(a);
System.out.println(a == 1.00);
if (a == 1.00) {
break;
}
a += 0.01;
}
System.out.println(sum);

}

}


江清清 2011-05-31
  • 打赏
  • 举报
回复
这写法也太不规范了吧 直接进入死循环了。。。。 double 类型 转换a==1.00?还值得商榷
凡心未灭 2011-05-31
  • 打赏
  • 举报
回复
应该是精度问题,二进制有时候不能精确表示的
if里面的可以这样写:
if(Math.abs(a-1.00)<10e-5)

另外,你的书写习惯不太好,这个i有什么用?直接for(;;)或者while(true),或者将a放进for里面
qq292487069 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fengyun817 的回复:]
说实话真没见过这么写的.
第二个是循环判断标志,不写还真不知道是一直运行还是报错还是不运行
for (int i = 0; ; i++)
[/Quote]

呃,啥意思,我不用 a 来限制循环了吗?

当 a == 1 的时候就 break了啊

为什么会是死循环呢???
fengyun817 2011-05-31
  • 打赏
  • 举报
回复
说实话真没见过这么写的.
第二个是循环判断标志,不写还真不知道是一直运行还是报错还是不运行
for (int i = 0; ; i++)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧