2011-09-25 152 views
0

我需要我的输出为前100个五边形数字,每行十个,连续计数。就目前而言,我的输出只是重演,我相信这是一个简单的答案,但我似乎无法想出它。这是家庭作业,已经评分,但我想弄明白为我学习。预先感谢任何意见和帮助。输出问题,Java

package chapter_5; 

/** 
* 
* @author jason 
*/ 
public class Five_One { 


    public static void main(String[] args) { 
     for (int k = 1; k < 11; k++) { 
      for (int n = 1; n < 11; n++) { 
       System.out.print(getPentagonalNumber(n)+ "\t"); 
      } 
      System.out.println(); 

     }   
} 

    public static int getPentagonalNumber(int n) { 
     return n * (3 * n - 1)/2; 

    } 

} 

回答

2

你一边喊getPentagonalNumber(),范围[1,10]中的数字,而不是在增加范围内调用数字。可以通过添加10 * k [并且从0到10代替1到11运行k]来解决。

public static void main(String[] args) { 
     for (int k =0; k < 10; k++) { //range is [0,10) instead [1,11) 
      for (int n = 1; n < 11; n++) { 
       System.out.print(getPentagonalNumber((10*k)+n)+ "\t"); //10*k + n instead of n 
      } 
      System.out.println(); 

     }   
} 
0

如果你需要的第100张五角数,你只需要一个for循环从1将100

希望这有助于。

0

你的输出包含

getPentagonalNumber(n) 

其中n是列数。因此每一行都是一样的。

你必须纳入行号k也是在你的计算:

getPentagonalNumber((k-1) * 10 + n) 

即行与行索引增加10

2

它应该是:

System.out.print(getPentagonalNumber((k-1) * 10 + n) + "\t"); 

因为如果不是这样的话,你会写出前10个五边形数字,十次。

在任何情况下,我宁愿把注意力放在创造一个代码,容易阅读/维护成为可能,所以我只用一个循环:

for (int i = 0; i < 100; i++) { 
     System.out.print(getPentagonalNumber(i + 1) + "\t"); 
     if (i % 10 == 0) { 
      System.out.println(); 
     } 
    } 
+0

额外的功劳是为了强调可读性和可维护性! –