一道程序题求解
本人刚入门,求解 
 写出过程代码 
 s=1-1/2+1/3-1/4+1/5-... 
 求当s> 0.1时的s的值 并打印出全过程
------解决方案--------------------float s = 1.0; 
 System.out.print( "s= 1 "); 
 for(int i=1;;i++){ 
     if(s  < 0.1){ 
         break(); 
     } 
     if(i%2 == 1){ 
         s = s - 1/(i+1); 
         System.out.print( "- 1/ "+(i+1)); 
     }else{ 
         s = s + 1/(i+1); 
         System.out.print( "+ 1/ "+(i+1));   
     } 
 }
------解决方案--------------------public class Test {  
         public static void main(String args[]) throws 
IOException{ 
         BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
         String s=br.readLine(); 
         double n =Double.parseDouble(s); 
         double sum=1; 
         for(int i=2;i <n;i++){ 
             if(sum> 0.1){ 
             if(i%2==0){ 
                 sum=sum-(1.0/i); 
                 System.out.println( "sum:  "+sum); 
             }else{ 
                 sum=sum+(1.0/i); 
                 System.out.println( "sum:  "+sum); 
             } 
             } 
         }             
         } 
         } 
------解决方案--------------------ls的做法有问题,是死循环了,因为这个数列不可能小于0.1的,而且 s = s - 1 / (i+1)时,这个值永远是1,因为i是int型的 1/(i+1) (i> 1)时永远是0,而且代码 if(i%2==1) 也不严谨,似应改为 if(i%2 != 0) 较为严谨些,可以避免负奇数的麻烦。 
 lz的问题也是有问题的,s> 0.1?那还算什么呀,还没算就大于了0.1,我想应该是计算精度误差大于0.1吧,代码如下: 
 public static void main(String[] args) { 
   double epsilon = 0.1d; // 计算精度 
   double sum = 1.0d; 
   double preSum = 0d;		 
   double error = 1;	 
   StringBuilder sb = new StringBuilder( "s=1 ");		 
   for(int i = 1; error >  epsilon; i++) {			 
     preSum = sum; 
     if ((i & 1) != 0) { 
       sum -= 1.0d / (i + 1); 
       sb.append( "-1/ "); 
     } else { 
       sum += 1.0d / (i + 1); 
       sb.append( "+1/ "); 
     } 
     sb.append(i + 1); 
     error = Math.abs(sum - preSum); 
     System.out.printf( "%s=%.16f (精度误差: %.5f)%n ", sb.toString(), sum, error); 
   } 
 }