2014-03-06 124 views
1

好吧,我正在和Java一起工作,我感到非常困惑。我有代碼看起來像這樣爲什麼我的Java for循環沒有在循環外設置變量?

private double computeValue(Warehouse house) { 
    double price; 
    int quant; 
    double value; 

    for (int i=0; i < house.size(); i++) { 
     price = house.getItem(i).getPrice(); 
     quant = house.getItem(i).getQuantity(); 

     value += (price*quant); 
    } 

    return value; 
} 

它通過讀取次數達到數倉庫項目即是它的大小,而當它它得到該項目的倉庫,它的價格和數量,以及它們相乘一起成爲價值

現在,這一切都很好,並且變化,但變量值被設置爲不會放棄循環的數字。它說價值在我運行時沒有被初始化,如果我將它設置爲一個隨機的虛擬數字,它就會返回該數字,而不是從乘以價格和數量中得到的數字。任何人都可以告訴我如何解決這個問題,以便變量值從循環中獲得一個數字並返回它,以及理解爲什麼它正在做它正在做的任何事情會有幫助。謝謝!

編輯:我定house.size()爲0的問題,現在被設置爲10,仍然未初始化的返回值的誤差

+5

如果'house.size()'返回'0'會怎麼樣?你的'價值'有什麼價值呢? –

+0

因爲在那可能是問題?它根本不運行循環? –

+0

是的,如果循環沒有運行,您的字段不會被初始化。給它一個默認值。 –

回答

3

它可能是您的

house.size(); 

正在返回0?

你還試圖獲得房子裏最後一件物品的價值?

如果你想獲得所有項目的累計價值和價格,你或許應該改變你的值賦給:

value = value + (price*quant); 

否則將永遠只能返回在家裏的最後一個項目的價值。

+0

感謝積累提示,我忘了這一點,但是我做了house.size()現在等於大於0(10是精確的)和它的仍返回錯誤 –

+0

@DavidGrabon嘗試所有的變量初始化爲0,讓我知道。 – TheShinyTuxedo

1

好的答案被發現,我必須設置雙重啓動用0.0的值,而不是什麼都沒有,所以現在它的工作原理

private double computeValue(Warehouse house) { 
    double price; 
    int quant; 
    double value = 0.0; 

    for (int i=0; i < house.size(); i++) { 
     price = house.getItem(i).getPrice(); 
     quant = house.getItem(i).getQuantity(); 

     value += price*quant; 
    } 

    return value; 
} 
0

除了house.size()值可能爲0,無論是由getPrice()getQuantity()返回的pricequantity值可能會返回0,因此不會導致變量value變量。

這很容易調試。例如,for循環可以包括print聲明,如下:執行完畢

for (int i=0; i < house.size(); i++) { 
     price = house.getItem(i).getPrice(); 
     quant = house.getItem(i).getQuantity(); 

     value += (price*quant); 

     System.out.println("\nRound #" + i + ": value = " + value + ", price = " + price + ", quant = " + quant); 
    } 

後,所有的值的細節將提供檢查和驗證。

+0

那麼價格和定量變量,如果它們返回0,那麼它仍然會使值等於0,這是一個值,所以它會返回。此外,他們不返回0,它的所有工作現在,我把答案它只是不會讓我說它的答案2天或某事 –