A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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;
        }
}

7 个回复

倒序浏览
  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.         }
复制代码
回复 使用道具 举报
int n = 4; n%2是几?  结果是0.那么只会执行Add方法,Add方法中 for循环的条件表达式,a<a/2+1 也就是说n/2不能大于1,那么运行结果 也就是0和1。 因为你条件表达式已经限制了你的sum的返回值范围  ,Odd方法  在int a =4的情况下永远不会被执行到。
回复 使用道具 举报
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:39
报纸
改成double b=1/(2*aD)或double b=1D/(2*a)
回复 使用道具 举报
陈宁 来自手机 中级黑马 2014-11-30 13:01:54
地板
不好意思,上面标记错了,d或D只能标记在常量的后面。如1d或1D.
回复 使用道具 举报
Strong 中级黑马 2014-11-30 13:25:57
7#
你的n初始化值是4是偶数所以只会执行Add方法
回复 使用道具 举报
int 类型是整数,1/N 只有1/1=1;其他都是带有小数的,比如1/2=0.5结果是个double类型,但是1和2都是int类型,他会自动把结果转换成int类型,double转换int类型向下转型丢失精度,所以他会将后面的精度丢失自然就成0或者1了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马