2012-07-12 108 views
0

嗨,大家好我還挺新的,以我做了這個簡單的程序一個關於Fibonacci 語言和程序工作正常,但有奇怪的現象,當我試圖讓平均數包裝奇怪的行爲

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); 

... .................................

當我嘗試

float aver= (float) (fibonacci.fibonaccifun(5))/5;結果爲2.4,其是正確的值,但是當我這樣做時

float aver= ((float) fibonacci.fibonaccifun(5)/5);平均值= 2.0;

我不知道它爲什麼這樣做,所以任何人都可以幫我解釋這個,thx的傢伙。

回答

3

因爲在第二種情況下

fibonacci.fibonaccifun(5)/5

變爲2,作爲fibonaccifun和5兩者的結果都是整數,THEN在投射到浮動。 (如果分割2個整數,其結果是一個int和整數顯然不能有小數)

在第一種情況

(float) (fibonacci.fibonaccifun(5))

使得fibonaccifun浮子的結果,THEN你做師。

0

你需要轉換至少分子或分母

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

您將2個整數。你永遠不會得到任何東西,但一個int鑄造浮動(因此2.0)

修復:

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

操作順序:在數學和計算機編程,操作(有時被稱爲運算符優先級)的順序是用來明確地澄清在給定的數學表達式中應首先執行哪些程序的規則。

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

括號 指數 乘法 司 加法減法

這是括號的開關怎麼纔可以引發整個程序的邏輯出了門一個很好的例子。