0
public void printStars(int level) {

    for (int one = level; one >= 1; one--) {

        for (int two = one; two <= level; two++) {


            System.out.print("*");

        }
        System.out.println();


    }
}

我正在尝试制作如下所示的东西:

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

目前,我得到了大约一半的正确图表全部左对齐。

我试图合并 printf,但我意识到它不起作用,因为 的值level无法传递给 printf 方法。我还想知道是否有办法将最长的段(底部)设置为等于(2 * 级别) - 1 星长并对其应用某种格式以获得答案?

4

2 回答 2

3

在前面打印适当数量的空格

public void printStars(int level) {

    for (int one = level; one >= 1; one--) {
        for(int k=1, k<one;k++){  // print appropriate number of spaces before
            System.out.print(" "); 
        }    
        for (int two = 1; two <=2*(level-one)+1; two++) {
            System.out.print("*");
        }
        System.out.println();
    }
}

解释:

  1. 如果总共有 N 个级别,并且最后一行没有任何空间。=> N-1 个级别将在第一行有 N-1 个空格,在第二行有 N-2 个空格,依此类推.. 第 (N-1) 行有 1 个空格。

  2. 星数:(level-one) 给你正在打印的行减 1,因为,最初当 one = level (one-level = 0) 时,它的第一行,接下来它的 (level-one) = 1,因为一个是减少。& 在你必须打印的每一行中,2*X +1 *'s,

于 2012-10-18T03:56:07.930 回答
2

试试下面:

public static void printStars(int level) {
    for (int one = 0; one < level; one++) {
      for(int space = 1; space < (level-one); space++){ //<- print leading space
       System.out.print(" ");
      }

      //<- print stars in odd numbers e.g. 1,3,5,7
      for (int two = 0; two < 2*one+1; two++) { 
       System.out.print("*");
      }
      System.out.println();
   }
 }
于 2012-10-18T03:56:53.757 回答