黑马程序员技术交流社区

标题: 帮忙看下这段程序哪里错了 [打印本页]

作者: 郭炜    时间: 2012-3-4 01:15
标题: 帮忙看下这段程序哪里错了
求1-/2+1/3-1/4+、、、、、、、-1/98+1/99   的和

class chen {
        public static void main(String[]args){
                int i;
                float s=0.0,y;
                for(i=1;1<=99;i++){
                        if(i%2==0)
                                y=1.0/i*(-1);
                        else
                                y=1.0/i;
                                s+=y;
                }
                System.out.println(s);
        }
}
作者: 佟都    时间: 2012-3-4 01:39
本帖最后由 tongdu_simon 于 2012-3-4 02:09 编辑
  1. /**
  2.         求1-1/2+1/3-1/4+、、、、、、、-1/98+1/99的和
  3. */

  4. class Test
  5. {
  6.     public static void main(String[] args)
  7.     {
  8.         int i;
  9.         double s=0.0,y;
  10.         for(i=1;i<=99;i++){
  11.             if(i%2==0)
  12.                 y=1.0/i*(-1);
  13.             else
  14.                 y=1.0/i;
  15.                 s+=y;
  16.         }
  17.         System.out.println(s);
  18.     }
  19. }
复制代码
存在2个问题:
1、精度问题 float→double;
2、拼写错误 for( ; i<=99; )

作者: 段玉超    时间: 2012-3-4 01:49
  1. import java.lang.*;
  2. public  class  Sum
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int flag =-1;
  7.                 float sum=0;
  8.         for(int i =1; i<=99; i++){
  9.                         flag  = -flag;
  10.                         sum += flag /(float)i;
  11.                 }

  12.         System.out.println(sum);
  13.         }
  14. }
复制代码

作者: 曹晓涵    时间: 2012-3-4 02:31
本帖最后由 曹晓涵 于 2012-3-4 02:57 编辑

/*类(Classes) 命名规则:chen改为Chen,不改也不影响运行结果
  1)类名必须由大写字母开头,一个单词中的其他字母均为小写字母
  2)若多单词组成。则建议每个单词的首字母均大写,如TestDemo
   3)若类名中包含单词缩写,则建议将这个词的每个字母均为大写,如XMLDemotional
   4)类名尽量用名词
*/

class Chen {
     public static void main(String[]args){
           int i;
           /* 错误1:float s=0.0,y; 改为 float s=0.0f,y;
               此处定义s为float型的变量,0.0小数系统默认为double型的变量,
         直接将double赋值给float会丢失精度,小数后需加上f表示float型。
       */

            float s=0.0f,y; //若变量名s改为sum显得更有意义
       /*错误2:for(i=1;1<=99;i++)改为for(i=1;i<=99;i++)
              此处1<=99为死循环,将1<=99改为i<=99
          */

          for(i=1;i<=99;i++){
        if(i%2==0)
             /*错误3:y=1.0/i*(-1)改为y=(float)(1.0/i*(-1))
                在前面定义变量时时将y同样定义为float类型,而后面的公式
             有小数1.0参与运算,运算结果自动提升为double类型,因此
             需要整个公式用括号括起来并强制类型转换为float类型后再
             赋值给y
             */

              y=(float)(1.0/i*(-1));
               else
             /*错误4: y=1.0/i改为 y=(float)(1.0/i)
                错误原因同错误3
             */

                    y=(float)(1.0/i);//
               s+=y;                                 
           }
           /*说明:觉得本题中的for 循环也可以写成下面形式显得更为简洁
       for(i=1;i<=99;i++){
          y=(float)(1.0/i);
          if(i%2==0)                               
               s-=y;
                else                            
                     s+=y;                         
           }
           */

          System.out.println(s);  
     }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2