2011-09-06 57 views
4

我必須從1-100找到第一個N [pentagonal numbers][1],然後每行顯示10個。我也必須使用getPentagonalNumber(int n)方法;這顯然是爲什麼它在那裏。找到前N個五邊形數字

這是我的代碼到目前爲止。

package chapter_5; 

public class Five_One { 

    public static void main(String[] args) { 
     int n = 0; 
     int numPerLine = 10; 
     for (n = 0; n < 11; n ++)   
    } 

    public static int getPentagonalNumber(int n) { 
     int formula = n * (3 * n - 1)/2; 
     while (formula <) 
    } 
} 
+0

什麼是你的「具體」問題? –

+0

嗯,我真的覺得我不應該幫助你....道德的東西。但是我會幫你一把,所以你可以編一些代碼。首先,您必須打印該號碼,以便在某處丟失println。您還需要像內部一樣的重複結構,以便每行打印10個數字。使用打印(數字+「」),當計數器達到10時使用打印(\ n) –

+0

您將不得不計算1到n之間的每個值的公式。要做到這一點,你將不得不在時間內計算公式。第一個提示我可以給你:不要修改參數的值,換句話說,避免做'n ++'使用其他變量來做增量。經常在循環中使用'i'變量。 – Lynch

回答

1

請注意,您只執行公式一次,然後遞增,直到你獲得101所以,你必須做essentionally:100 *(3 * 100 - 1)/ 2 = 14950.

考慮getPentagonalNumber返回一個單一的值,然後用從1開始的遞增值進行x次調用,直到你得到一個大於100的值,或者直到你根據你的要求完成了100次。

0

不應該是return formula;而不是return n;因爲我假設您正在嘗試將計算結果返回給您?

3

這還有很長的路要走。讓我們用更好的方法在這裏分解它。

讓我們創建一個方法,返回一組五邊形數字(我們將使用一個數組)。這可以讓我們稍後使用該方法,如果也許還有額外的功勞!

我們的簽名看起來是這樣的:

class Jason { 

    public static void main(String[] args) { 
     // don't mix the calc routine and printing... 
     int[] pents = getPentagonals(100); // calcs and stores the first 100 values 

     final int numPerLine = 10; 
     for(int i = 0; i < pents.length; i++) { 
      System.out.print(pents[i]); 
      System.out.print(" "); 
      if(i % numPerLine == numPerLine - 1) System.out.println(""); 
     } 
    } 

    static int[] getPentagonals(int n) { 
     int[] pents = new int[n]; 
     // calculate pents 
     for(int i = 0; i < pents.length; i++) { 
      // calculate the ith pentagonal here (assuming the 0th is first) 
      // store it in pent[i] 
     } 
     return pents; 
    } 

} 
+0

'i%numPerLine = numPerLine - 1'缺少一個'=' – xanatos

+0

@xanatos很好的捕獲。值得慶幸的是,這是ide所捕獲的,並在那裏編譯器失敗。此外,你有足夠的代表,你可以編輯它:-) – corsiKa

+0

如果我觸摸你的代碼,我會需要手套:-)我是總是使用{}節和'之間沒有空行的成員}和}並且{{support group。}之後沒有空行。實際上是另一個世界:-)它仍然是一個+1,因爲它很好,格式正確,帶有小寫變量:-) – xanatos

1

我想我會構建這個方法是有getPentagonalNumber(int n)返回n個五角數 - 只計算一次一個。這使它易於理解和測試。擔心在main函數中編譯它們的列表可能會調用您的getPentagonalNumber函數。

您可能希望將主要功能存儲結果存入List。當列表.size() == 10,請撥打printResults(theResultList)(您將使用當前的main中的一些代碼編寫)和.clear()列表。特別是在開始時,保持功能小和責任明確分開將有助於您跟蹤代碼的工作情況。