黑马程序员技术交流社区
标题:
分母分别是奇偶的分数求和,不论n是几,结果总是0和1,...
[打印本页]
作者:
daiyong
时间:
2014-11-28 21:24
标题:
分母分别是奇偶的分数求和,不论n是几,结果总是0和1,...
class Test
{
public static void main(String[] args)
{
int n=4;
if(n%2==0)
System.out.println(Add(n));
else
System.out.println(Odd(n));
}
public static double Add(int n)
{
double sum=0;
for(int a=1;a<n/2+1;a++)
{
double b=1/(a*2);
sum=sum+b;
}
return sum;
}
public static double Odd(int n)
{
double sum=0;
for(int a=0;a<n/2;a++)
{
double b=1/(a*2+1);
sum=sum+b;
}
return sum;
}
}
作者:
没劲睡觉
时间:
2014-11-28 22:44
public static double Add(int n)
{
double sum=0;
for(int a=1;a<n/2+1;a++)
{
// double b=1/(a*2);//除数要定义成double类型的 不然就自动取整,分成下面两步就ok
double c = a*2;
double b = 1/c;
sum=sum+b;
}
return sum;
}
复制代码
作者:
wf111sxwf
时间:
2014-11-28 22:50
int n = 4; n%2是几? 结果是0.那么只会执行Add方法,Add方法中 for循环的条件表达式,a<a/2+1 也就是说n/2不能大于1,那么运行结果 也就是0和1。 因为你条件表达式已经限制了你的sum的返回值范围 ,Odd方法 在int a =4的情况下永远不会被执行到。
作者:
javaAndroid
时间:
2014-11-29 13:51
double b=1/(a*2);和double b=1/(a*2+1);改为
double b=1.0/(a*2);double b=1.0/(a*2+1);
试试看
作者:
陈宁
时间:
2014-11-30 12:57
改成double b=1/(2*aD)或double b=1D/(2*a)
作者:
陈宁
时间:
2014-11-30 13:01
不好意思,上面标记错了,d或D只能标记在常量的后面。如1d或1D.
作者:
Strong
时间:
2014-11-30 13:25
你的n初始化值是4是偶数所以只会执行Add方法
作者:
lwh316658735
时间:
2014-11-30 13:33
int 类型是整数,1/N 只有1/1=1;其他都是带有小数的,比如1/2=0.5结果是个double类型,但是1和2都是int类型,他会自动把结果转换成int类型,double转换int类型向下转型丢失精度,所以他会将后面的精度丢失自然就成0或者1了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2