2012-12-14 4 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; 
      } 
     } 
    } 

// double term (int numr, long denom) // {return (numr/denom);} 이 함수는 double 값을 반환하지 않습니다. 제발 도와주세요 ...이 프로그램은 최대 개까지 용어를 찾을 수 있습니다. 예 - 테스트 용어가 2.5 대신 2.0을 반환합니다 ... 감사합니다.Double 함수가 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=en&sa=X&ei=VQLLUNL-EIv54QTXnYHICQ&ved= 0CC0Q6AEwAA # v = onepage & q = int % 2Flong % 20result % 20type % 20java & f = false –

+4

안녕하세요. 그의 첫 번째 질문입니다. – cruxi

답변

4

하는 당신은 devision 전에 두 배로 명시 적으로 캐스팅해야합니다.

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

+1'numr'과'denom'도'double'이어야한다고 생각합니다. –

+0

@PeterLawrey 감사합니다! 그것은 예상대로 작동합니다. –

+1

@ fb-np1810 다른 함수에서도'num'을'double'을 사용하도록 바꿀 것을 제안합니다. –

0

는 버전이 항상 비 부동 소수점 숫자를 반환합니다 int/long했다

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

보십시오.

이를 참조하십시오

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하지만 devision (numr/denom)는 두 배로 변환되는 long을 만듭니다.

0

도움이 될 수 있습니다.

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