制作一个有星星的三角形

时间:2014-11-18 15:23:37

标签: java

我正在尝试制作一个用星星制作三角形的程序,比如这个:

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

我以为我拥有它但是在我的代码中的某个地方我做了一个逻辑错误,而不是减少星星之前的空格数,让它们保持在前面所以看起来像这样

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

我的代码:

    System.out.print("Give a positive odd integer: ");
    Scanner s = new Scanner(System.in);
    int N = s.nextInt();
    int cnt1 = 0;
    int cnt2 = 0;
    int cnt3 = 0;
    int line = N - 1;
    char c1 = '*';
    char c2 = ' ';
    StringBuilder sb = new StringBuilder();
    if (N > 0 && N % 2 == 1) {
        while (cnt1 < N){
            while (cnt2 < N-line){
                while (cnt3 < line){
                    sb.append(c2);
                    cnt3++;
                }
                sb.append(c1);
                cnt2++;
            }
            line--;
            cnt1++;
            System.out.println(sb.toString());
        }
}

3 个答案:

答案 0 :(得分:2)

我的回答:

System.out.print("Give a positive odd integer: ");
Scanner s = new Scanner(System.in);
int N = s.nextInt();
System.out.print("\n");
char c1=' ';
char c2='*';

if(N>0 && N%2==1) {
    for(int i=0; i<N; i++) {
        for(int x=0; x<N-i; x++) {
            System.out.print(c1);
        }
        for(int x=0; x<i+1; x++) {
            System.out.print(c2);
        }
        System.out.print("\n");
    }
}

使用7输出样本:

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

如果您想使用while,请将if(N>0 ...之间的代码替换为:

    int i=0, x=0;

    while(i<N) {
        while(x<N-i) {
            System.out.print(c1);
            x++;
        }
        x=0;
        while(x<i+1) {
            System.out.print(c2);
            x++;
        }
        i++;
        System.out.print("\n");
    }

答案 1 :(得分:0)

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("How many rows: ");
    int rows = input.nextInt();
    for (int i = 0 ; i < rows ; i++) {
        for (int x = 0 ; x < rows - i ; x++) {
            System.out.print(" ");
        }
        for (int x = 0 ; x < i + 1 ; x++) {
            System.out.print("*");
        }
        System.out.print("\n");
    }
}

<强>输出

How many rows: 10

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

答案 2 :(得分:0)

你非常接近,我的代码在下面进行了一些小修改:(我只是在循环中移动了一些行):

System.out.print("Give a positive odd integer: ");
Scanner s = new Scanner(System.in);
int N = s.nextInt();
int cnt1 = 0;
int line = N - 1;
char c1 = '*';
char c2 = ' ';

if (N > 0 && N % 2 == 1) {
    while (cnt1 < N){
        StringBuilder sb = new StringBuilder(); // CHANGED
        int cnt2 = 0; // CHANGED
        int cnt3 = 0; // CHANGED

        while (cnt2 < N-line){
            while (cnt3 < line){
                sb.append(c2);
                cnt3++;
            }
            sb.append(c1);
            cnt2++;
        }
        line--;
        cnt1++;
        System.out.println(sb.toString());
    }
}

如果输入为7,则会打印以下内容:

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

您的问题是某些变量未被重置。我的红旗是因为我看到cnt3变量从未被重置为0,所以它只进入该循环一次。 StringBuilder未被重置导致这些空格每次都具有相同的长度。