2015-04-04 72 views
0

因此,以下是該程序的簡介:「根據CNNMoney.com,Facebook在2012年10月達到了10億用戶。使用您在圖4.6中學到的複合增長技術並假設其用戶基地以每月4%的速度增長,需要多少個月才能將其用戶羣增加到15億用戶?Facebook需要多少個月才能將其用戶羣擴大到20億用戶?「使用複合增長的Java程序

我有程序「工作」,但我覺得好像它不是正確計算值。我也不知道我是否正在使用最新或有效的Java技術。我絕對是一個初學者,所以任何建議或指針將非常感激。這是我到目前爲止!

package programmingassignment4.pkg32; 

public class ProgrammingAssignment432 { 

    public static void main(String[] args) { 
     int user= 1000000000; 
     int user2= 1000000000; 
     double total1 = 0; 
     double total2 = 0; 
     int grandtotal1=0; 
     int grandtotal2=0; 
     int i = 1; 
     int j=1; 
     for(i=1; user<=1500000000; i++) 
     { 
      total1 = user*(.04); 
      user+=total1; 
     } 
     System.out.print("The total number of months to reach 1.5 billion users will be : " + i + "\n"); 
     for(j=1;user2<=2000000000;j++) 
     { 
      total2 = user2*(.04); 
      user2+=total2; 
     } 
     System.out.print("The total number of months to reach 2 billion users will be : " + j); 
    } 
} 
+1

如果您想更詳細地查看您的代碼,codereview.stackexchange.com可能更符合您的需求。 – Others 2015-04-04 20:42:47

+1

在發佈到[codereview.se]之前,提問者應該首先弄清楚這是什麼編程語言(無語言標籤),然後是否他們確定它能產生正確的結果並按預期工作。 – nhgrif 2015-04-04 20:45:15

+0

請詢問更具體的問題。我不覺得價值觀是正確的。我知道或不知道。你做? – 2015-04-04 20:45:39

回答

0

我想說你的代碼是在正確的軌道上,你似乎理解了這個概念。但是,我相信你的for循環會錯誤地給你一個比實際達到目標所需的月數大1的值,因爲你的值是1而不是0。

在循環之前聲明循環變量也有點奇怪(但沒有錯誤),所以我想我會使用while循環。此外,因爲您有效地運行相同的邏輯兩次,代碼將更好地移到它自己的方法中,以便您可以靈活地調用它。事情是這樣的:

private static int monthsOfGrowthRequired(int startAmount, 
     int targetAmount, double growthFactor) { 
    int monthsOfGrowth = 0; 
    int runningAmount = startAmount; 
    while (runningAmount < targetAmount) { 
     runningAmount *= growthFactor; 
     ++monthsOfGrowth; 
    } 
    return monthsOfGrowth; 
} 

注意,此方法將採取1.04 growthFactor值每月+ 4%的增長率。 (因此,對於每月-4%的比率,其值爲0.96)。

至於檢查你的號碼:這很容易。確切的數字可以計算而不需要像這樣的數值分析方法,因爲可以直接使用對數。例如,在目標爲1.5十億,其中m等於需要增長的月數的情況下,你可以這樣寫公式:

1.04^m = 1.5 
因此

m = (log 1.5)/(log 1.04) 

它交給你對目標爲20億的情況應用相同的邏輯,並改進建議的方法,以增加任何可能必要的安全檢查,以避免錯誤輸入,並捕捉任何情況下方法永遠不會結束的情況。

+0

謝謝你深思熟慮的答覆。我非常感謝那些比我不知道自己在做什麼,或者在我的問題中選擇使用這個詞的人。 – 2015-04-05 15:48:29

0

我希望我的回答仍能幫助任何正在尋找解決方案的人。我認爲這裏發佈的唯一解決方案有點複雜。試試我的。

你的任務說使用複合增長公式,爲什麼你不使用它?

a = p(1 + r)n 

其中a將總量,p是你的起始速率(在這種情況下1bln),r是你的成長速度和n是幾個月。非常直截了當。

您可以使用Math.pow Java方法。

total = startrate * Math.pow(1.0 + growthrate, month); 

Math.pow(x, y)計算升高到yth功率的x值。 方法接收兩個雙參數並返回double值。

以下是運行代碼礦山產量:

Facebook User Base Growth 

Projected User Base in months after October 2012 
    1 1,040,000,000.00 
Months 
    2 1,081,600,000.00 
Months 
    3 1,124,864,000.00 
Months 
    4 1,169,858,560.00 
Months 
    5 1,216,652,902.40 
Months 
    6 1,265,319,018.50 
Months 
    7 1,315,931,779.24 
Months 
    8 1,368,569,050.41 
Months 
    9 1,423,311,812.42 
Months 
    10 1,480,244,284.92 
Months 
    11 1,539,454,056.32 
Months 

It took Facebook 11 months to grow that big. 

Now we will count how many months it will take to get to 2bln users. 

    11 1,539,454,056.32 
Months 
    12 1,601,032,218.57 
Months 
    13 1,665,073,507.31 
Months 
    14 1,731,676,447.60 
Months 
    15 1,800,943,505.51 
Months 
    16 1,872,981,245.73 
Months 
    17 1,947,900,495.56 
Months 
    18 2,025,816,515.38 
Months 

It took Facebook 18 months to grow that big. 

如果火花足夠的興趣,我可以在這裏發佈的全部代碼。 快樂編程!