黑马程序员技术交流社区
标题:
为什么只有用do while才能做的出来呢?还是我其他的写得不对?求大神指点
[打印本页]
作者:
黄梁梦想享
时间:
2014-7-13 17:19
标题:
为什么只有用do while才能做的出来呢?还是我其他的写得不对?求大神指点
/*
* 需求:计算1+1/3+1/5+1/7+...+1/(2*n+1)的值。且必须得到1/(2*n+1)小于0.00001时为止。
* 当循环结束时,显示表达式中n的值,以及表达式的结果。
*
*/
public class sumTwo {
public static void main(String[] args){
// 第一种
// int n=1;
// double sum=1.0;
//// double N=1.0/0.00001;
// double l=1.0/(2*n+1);
// while(l>=0.00001)
// {
// sum+=l;
// n++;
// }
// System.out.println(sum);
// System.out.println(n-1);
// System.out.println(l);
// 第二种
int n = 1;
double sum = 1.0;
for(double l=1.0/(2*n+1);l>=0.0001;n++)
{
sum+=l;
}
System.out.println("循环结束时n的值:"+n);
System.out.println("计算出的结果是:"+sum);
// 第三种
// int n=1;
// double dSum=1.0,dTemp;
// do
// {
// dTemp = 1.0/(2*n+1);
// dSum+=dTemp;
// n++;
// }
// while(dTemp>=0.00001);
// System.out.println(n-1);
// System.out.println(dSum);
//
}
}
只有第三种才能运行 其他的运行不了。求指点!!!
作者:
blue_sky
时间:
2014-7-13 17:57
看你的第二种:使用for循环操作的时候:
for 循环结构
for(初始化表达式1;循环条件表达式2;循环后的操作表达式3)
{
执行语句;
}
执行过程:
1、首先进行初始化表达式的计算;
2、然后进行循环条件表达式的验证;
3、若符合执行循环体,再执行4;若不符合则结束循环;
4、执行完执行语句后,再执行循环后操作表达式
5、执行完循环后表达式的值跳转到2进行验证
6、载执行3
你每一次循环虽然都执行了n++;但是,接着操作l>=0.0001;但是,l的值一直都是1.0/(2*1+1);所以就死循环了;
你的第一种方法;使用whilel判断表达式,其实和上面犯得错误一样;l的值已经固定;无论你怎么判断,都和第一次的判断结果一样;所以就死循环;
作者:
blue_sky
时间:
2014-7-13 17:59
while循环语句
while(条件表达式)
{
执行语句;
}
执行过程: 符合条件表达式的时候执行执行语句;
然后再进行验证条件表达式;
若满足再执行执行语句;
若不满足跳出循环;
看看while和for循环的执行流程,你就清楚了;一定要搞清楚控制变量
作者:
爨庚轩
时间:
2014-7-13 18:03
int n = 1;
double sum = 1.0;
double l=1.0/(2*n+1);
n++; //从n=2开始循环
for(;l>=0.00001;n++)
{
sum+=l;
l=1.0/(2*n+1); //l的值每次都得计算
}
System.out.println("循环结束时n的值:"+n);
System.out.println("计算出的结果是:"+sum);
第二种的给你修改了,看看我的注释
for循环和while循环的区别就是,for循环第一次循环都必须判断条件是否满足,do-while循环第一次不用判断条件是否满足,也就是do-while循环至少执行一次,for循环有可能一次都不执行。
第一种方法的错误和第二种方法的错误一样,我给第二种的给你改了改,你看完后,自己修改第一种的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2