2011-09-06 155 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()列表。特别是在开始时,保持功能小和责任明确分开将有助于您跟踪代码的工作情况。