找到前N个五边形数字

时间:2011-09-06 19:55:43

标签: java methods for-loop

我必须从1-100找到第一个N [pentagonal numbers][1]并在每行显示10个。我也必须使用getPentagonalNumber(int 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 < )
    }
}

4 个答案:

答案 0 :(得分: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;
    }

}

答案 1 :(得分:1)

请注意,您只执行一次公式然后递增它直到您得到101.所以您已经完成了:100 *(3 * 100 - 1)/ 2 = 14950。

考虑让getPentagonalNumber返回单个值,然后使用从1开始的递增值调用x次,直到得到值&gt; 100或直到你完成100次,具体取决于你的要求。

答案 2 :(得分:1)

我认为我构建此方法的方法是让getPentagonalNumber(int n)返回n五角形数字 - 一次只计算一个。这使它易于理解和测试。担心在main函数中编译它们的列表,可以调用getPentagonalNumber函数。

您可能希望将主要功能存储结果转换为List。列表.size() == 10时,请调用printResults(theResultList)(您将使用当前main中的部分代码编写)和.clear()列表。特别是在开始时,保持较小的功能和明确分离的职责将有助于您跟踪代码的运行情况。

答案 3 :(得分:0)

不应该是return formula;而不是return n;,因为我假设您正在尝试将答案返回到您的计算中?