黑马程序员技术交流社区

标题: 分母分别是奇偶的分数求和,不论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
  1. public static double Add(int n)
  2.         {
  3.                 double sum=0;
  4.                 for(int a=1;a<n/2+1;a++)
  5.                 {
  6.                        // double b=1/(a*2);//除数要定义成double类型的  不然就自动取整,分成下面两步就ok
  7.                            
  8.                            double c = a*2;
  9.                             double b = 1/c;

  10.                         sum=sum+b;
  11.                 }
  12.                 return sum;
  13.         }
复制代码

作者: 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