2012-07-12 8 views
0

안녕들 내가 피보나치 에 대해이 간단한 프로그램을 만든 언어에 좀 새로운 오전 프로그램은 잘 작동하지만 난 평균 수래퍼 이상한 행동

public class fibonacci { 

/** 
* @param args 
*/ 
public static int fibonaccifun(int number) 

{ 
    int firstvar=1; 
    int secondvar=0,total=0,sum=0; 
    for(int i=0;i<number;i++) 
    { 
     total =firstvar+secondvar; 
     System.out.println(total); 
     firstvar=secondvar; 
     secondvar=total; 
     sum+=total; 

    } 

return sum; 
} 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 



    float aver= (float) (fibonacci.fibonaccifun(5)/5); 
    System.out.println(aver); 

을 얻을 때 이상한 행동이 ... 나는 결과 2.4

float aver= (float) (fibonacci.fibonaccifun(5))/5;

을 .......................................... 어느 그러나 올바른 값입니다,하지만 내가 이것을 할 때

float aver= ((float) fibonacci.fibonaccifun(5)/5); 평균 = 2.0;

나는 왜 이런 일을하는지 모르겠다. 누구든지 나를 설명하는 데 도움을 줄 수있다. 두 번째 경우에

fibonacci.fibonaccifun(5)/5

2로 이동하기 때문에

답변

3

fibonaccifun 5의 결과 모두로, 당신이 떠 캐스트 THEN의 int입니다. THEN

(float) (fibonacci.fibonaccifun(5))

fibonaccifun 부동 소수점의 결과를 만드는 첫 번째 경우에

, (당신이 둘의 int를 분할하는 경우, 결과는 int이며와의 int 분명히 소수를 가질 수 없습니다) 당신은 부서를합니다.

0

당신은 적어도 분자 또는 분모

((float) fibonacci.fibonaccifun(5)/5) 

당신은 2의 int를 분할하는 캐스팅해야합니다. 운영

(((float) fibonacci.fibonaccifun(5))/5) 
0

주문 : int로는 (따라서 2.0)

수정 떠 캐스트하지만 당신은 아무것도 못할거야 수학 및 컴퓨터 프로그래밍에를, 운영 (이라고도 연산자 우선 순위)의 순서 주어진 수학적 표현에서 어떤 절차가 먼저 수행되어야하는지 모르게 명확히하기 위해 사용되는 규칙입니다.

http://en.wikipedia.org/wiki/Order_of_operations

괄호 해설자 곱셈 부문 추가 뺄셈

이 괄호의 스위치가 문 밖으로 전체 프로그램의 로직을 던질 수있는 방법 단지의 완벽한 예입니다.