2014-09-01 67 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

此使用递归和高达打破了代码转换成有意义的方法是每个人都有自己的任务,在一个在线方式完成。

这不是一个高性能解决方案,但对于中等大小的应用来说足够快。它是为了可读性和方法凝聚力而编写的。