2012-12-14 151 views
1
public class Nitin12assignA6 { 

    public static void main(String args[]) throws IOException { 
     series ob = new series(); 
     ob.input(); 
     ob.findSum(); 
     ob.display(); 
    } 
} 
    class series { 

     int x, n; 

     double sum; 

     series() { 
      x = n = 0; 
      sum = 0.0f; 
     } 

     void input() throws IOException { 
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
      System.out.print("\nEnter the value of x = "); 
      x = Integer.parseInt(in.readLine()); 
      System.out.print("Enter the value of n = "); 
      n = Integer.parseInt(in.readLine()); 
     } 

     void display() { 
      System.out.println("The sum of Series upto " + n + " terms is: " + sum); 
      System.out.println(); 
     } 

     long fact(int num) { 
      if(num == 1) { 
       return 1; 
      } 
      return num * fact(num - 1); 
     } 

     int power(int num, int exp) { 
      if(exp == 1) { 
       return 1; 
      } 
      return num * power(num, exp - 1); 
     } 

     double term(int numr, long denom) { 
      return(numr/denom); 
     } 

     void findSum() { 
      int u = 2, l = 4; 
      sum = 1.0f; 
      for(int i = 0; i < n; i++) { 
       if(l % 8 == 0) { 
        sum += term(power(x, u), fact(l)); 
        // Test start 
        System.out.println("add" + sum + " power " + power(x, u) + " fact " + fact(l) + " x " + x + " u " + u 
          + " l " + l); 
        System.out.println("term " + term(power(x, u), fact(l))); 
        System.out.println("test term " + term(5, 2)); // printing 2.0 
                    // instead of 2.5 
        // Test end 
       } else { 
        sum -= term(power(x, u), fact(l)); 
        // Test start 
        System.out.println("minus" + sum + " power " + power(x, u) + " fact " + fact(l) + " x " + x + " u " + u 
          + " l " + l); 
        System.out.println("term " + term(power(x, u), fact(l))); 
        // Test end 
       } 
       u += 2; 
       l += 4; 
      } 
     } 
    } 

//雙項(int numr,long denom) // {return(numr/denom);} 該函數不返回double值。請幫忙...這個程序是找到一系列最多n個條款的總和。示例 - 測試術語返回2.0而不是2.5 ...謝謝。雙函數不返回Double值?

+1

首先要格式化。 –

+0

閱讀http://books.google.md/books?id=h0d8hVA5HyQC&pg=PA20&lpg=PA20&dq=int/long+result+type+java&source=bl&ots=AWOlnHTes6&sig=sPJGWGqyx-1oi2u1mCHN_bs-X3M&hl=zh-CN&sa=X&ei=VQLLUNL-EIv54QTXnYHICQ&ved= 0CC0Q6AEwAA#v = onepage&q = int%2Flong%20result%20type%20java&f = false –

+4

嘿,對他很好 - 這是他的第一個問題.. – cruxi

回答

4

您需要顯式轉換之前等分翻一番。

double term(int numr, long denom) { 
    return ((double)numr/denom); 
} 
+1

+1我懷疑'numr'和'denom'也應該是'double'。 –

+0

@PeterLawrey謝謝!它按預期工作。 –

+1

@ fb-np1810我建議你改變'num'在其他函數中使用'double'。 –

0

嘗試

double term(int numr, long denom) { 
    return ((double) numr/denom); 
} 

您的版本有int/long這將始終返回非浮點數。

看到這個:

int a = 2; 
int b = 4; 
double c = a/b; // 0.0 
double d = ((double) a/b); // 0.5 
+0

謝謝...答案解釋得很好.. @jlordo –

1

的鑄造double是從分割後的值完成的,所以你可以閱讀

double term(int numr,long denom) { 
    return (double) (numr/denom); 
} 

所以numr/denom首先計算,由於int/long型很長,其結果必然是2L 。然後它被鑄造成雙倍。如果你希望它評估了一倍,做

double term(int numr,long denom) { 
    return ((double)numr/denom); 
} 
0
double term(int numr, long denom) { 
    return (numr/denom); 
} 

返回值是double但等分(numr/denom)創建long,然後轉換爲double。

0

這可能有所幫助。

double term(int numr, long denom) { 
    return ((double)numr/denom); 
}