2014-09-01 62 views
-2

美好的一天傢伙!所以我現在自學java。我現在正在回答的練習之一是創建一個程序Pyramid.java,它接受輸入N並打印一個每邊長度爲N的金字塔,如下所示:我的問題是,每次我將輸入置於命令行,中間的3個星號不會出現。如何在Java中使用astersik製作金字塔?

* 
    * * 
    * * * 
* * * * 
* * * * * 

這裏是我的代碼

public class D2Q6 { 

public static void main(String[] args) { 
    int N = Integer.parseInt(args[0]); 
    int k = 1; 
    for(int i = 1; i <= N; i++) { 
     for(int j = 0; j < N-i; j++) 
      System.out.print(" "); 
     System.out.print("*"); 
     if(i > 1) { 
      if(i == N) { 
       for(int j = 0; j < i-1; j++) 
        System.out.print(" *"); 
      } 
      else { 
       for(int j = 0; j < k; j++) 
        System.out.print(" "); 
       k = k+2; 
       System.out.print("*"); 
      } 
     } 
     System.out.println(); 
    } 
} 
+4

這是一個**經典**編程練習。有[這個地方的答案](https://en.wikibooks.org/wiki/C_Programming/Beginning_exercises#Loops)。 – karlphillip 2014-09-01 22:47:36

+0

[我如何用for循環創建完美的急劇三角形?](http://stackoverflow.com/questions/24156468/how-can-i-make-perfect-acute-triangle-with-for-loop) – 2014-09-01 23:46:15

回答

0

我想你正試圖通過Eclipse或一些編輯器有自己的控制檯執行程序。該問題可能不在程序中,但是在控制檯中使用字體(類型和大小)。

嘗試在DOS提示符下運行該程序,並且您可能會看到所需的結果。

public class PrintPyramidStar 
{ 
    public static void main(String args[]) 
    { 
     int c = 1; 
     for (int i = 1; i <= 8; i++) 
     { 
      for (int j = i; j < 8; j++) 
      { 
       System.out.print(" "); 
      } 
      for (int k = 1; k <= c; k++) 
      { 
       if (k % 2 == 0) 
        System.out.print(" "); 
       else 
        System.out.print("*"); 
      } 
      System.out.println(); 
      c += 2; 
     } 
    } 
} 

以上是我使用搜索選擇的隨機星級程序。通過eclipse控制檯運行同樣的操作給了我一個歪斜的三角形,其中通過windows命令提示符運行相同的結果給了我一個完美的三角形。

Screenshot

0

我通過你在Eclipse計劃加強和思考的問題可能會在這裏。目前這正在打印一個空白區域。

 else { 
      for(int j = 0; j < k; j++) 
       System.out.print(" "); 
      k = k+2; 
      System.out.print("*"); 
     } 

如果將其更改爲下面的,它打印實心星號然後在最後一個額外的一個;

 else { 
      for(int j = 0; j < k; j++) 
       System.out.print("*"); 
      k = k+2; 
      System.out.print("*"); 
     } 

但是我認爲你要做一個'* * *'類的東西,但希望能夠爲你縮小它。

0

我會從創建兩個方法開始,一個是獲取空格,另一個是獲取星號。喜歡的東西,

private static String getNSpaces(int n) { 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < n; i++) { 
     sb.append(' '); 
    } 
    return sb.toString(); 
} 
private static String getNAsterisks(int n) { 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < n; i++) { 
     if (i != 0) { 
      sb.append(' '); 
     } 
     sb.append('*'); 
    } 
    return sb.toString(); 
} 

然後爲你main方法可以很簡單 -

for (int i = 1; i <= N; i++) { 
    System.out.print(getNSpaces(N - i)); 
    System.out.println(getNAsterisks(i)); 
} 

當我運行上面N等於5我得到

* 
    * * 
    * * * 
* * * * 
* * * * * 
0

我想我會發佈一個替代的,簡短的方法來進行這個通用的編程練習

public static void main(String args[]) { 
    System.out.println(pyramid(Integer.parseInt(args[0]))); 
} 

public static String pyramid(int size) { 
    return line(size, size); 
} 

public static String line(int max, int size) { 
    return size < 1 ? "" : line(max, size - 1) + copies(" ", max - size) + copies("* ", size) + '\n'; 
} 

public static String copies(String s, int size) { 
    return size < 1 ? "" : String.formatîui("%0" + size + "d", 0).replace("0", s); 
} 

See live demo

此使用遞歸和高達打破了代碼轉換成有意義的方法是每個人都有自己的任務,在一個在線方式完成。

這不是一個高性能解決方案,但對於中等大小的應用來說足夠快。它是爲了可讀性和方法凝聚力而編寫的。