2011-09-25 83 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

額外的功勞是爲了強調可讀性和可維護性! –