如何在三角形中打印*?

时间:2017-04-03 14:30:42

标签: java for-loop

     expected output:           ****   my output:      ****
                                ***                    ***
                                **                     **
                                *                      *
                                **                     *
                                ***                    *
                                ****                   **** 

我的代码:

class  assign17
    {
        public static void main(String[] args) 
        {
            int n=7;
            for(int i=0;i<7;i++)
            {
                for(int j=0;j<4;j++)    
                {
                    if(i+j<=n-4||j==0||i==n-1)
                        System.out.print("*");
                    else
                        System.out.print(" ");
                }
                System.out.println();
            }
        }
    }

怎么样这样? 如何选择内部? 我必须使用另一个for循环,否则我可以自己进入。

7 个答案:

答案 0 :(得分:2)

这将为您提供预期的输出

public static void main(String[] args)
{

    for (int row=1;row<=7;row+=2){ 
        for (int space=7;space>=row;space-=2){ 
            System.out.print("*");
        }
        for (int i=1;i<=row;i++){ 
            System.out.print(" ");
        }

        System.out.print("\n"); 
    }

    for (int row=5;row >=1; row-=2){ 
        for (int space=7;space>=row;space-=2){ 
                System.out.print("*");
        }
        for (int i=1;i<=row;i++){ 
            System.out.print(" ");
        }

        System.out.print("\n"); 
    }

}

我为你做了四个,看起来像是作业,所以我猜你更有可能这样理解。

说明:

两个第一个循环将打印星星,直到这个

****
***
**
*

其他两个循环将打印星星的最后一部分

**
***
****

答案 1 :(得分:2)

试试这个,我在你的代码中添加了else if条件

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

答案 2 :(得分:1)

如果你愿意,如果我是正确的话,你可以用它来递归

static void printstars(int num){
    if(num > 0){
        for(int t = 0; t<num;t++)
            System.out.print("*");
        System.out.println();
        printstars(num -1);
        for(int t = 0; t<num;t++)
            System.out.print("*");
        System.out.println();
    }
}

答案 3 :(得分:1)

每次迭代应打印的星数

iteration(i)      =>  0 | 1 | 2 | 3 | 4 | 5 | 6
number of star    =>  4 | 3 | 2 | 1 | 2 | 3 | 4
Math.abs(mid-i)+1 =>  4 | 3 | 2 | 1 | 2 | 3 | 4

所以我在这里使用了内循环限制Math.abs(mid-i)+1

public static void main(String[] args) 
{
  int n = 7;
  int mid = n / 2;

  for(int i=0; i<n; i++)
  {
    for(int j=0; j< Math.abs(mid-i)+1; j++)
    {
      System.out.print("*");
    }
    System.out.println();
  }
}

输出:

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

答案 4 :(得分:0)

它可能不是最好的解决方案,但它有效;)我只是从4星开始,每行减少1。如果只剩下一颗星,我会再次开始增加星星。

  public static void main(String[] args) {
        int stars = 4;
        boolean lower = true;
        for(int i=0;i<7;i++)
        {
            for(int j=0;j<stars;j++) {
                System.out.print("*");
            }
            if(lower) {
                stars--;
                if(stars==0){
                    stars=2;
                    lower = false;
                }
            }
            else {
                stars++;
            }

            System.out.println();
        }
    }

答案 5 :(得分:-1)

public class numPtr {
public static void main( String arg[]){
int ck=0,c=2;
    while(c>0){
    if(ck==0){
        for(int i=1,r=5;i<=5;i++,r--){
        for(int j=1;j<=r;j++){
            System.out.print(j);
        }
        System.out.println();        }
        ck++;
   } else{
        for(int i=2;i<=5;i++){
        for(int j=1;j<=i;j++){
            System.out.print(j);            }
        System.out.println();
    }
    }
    c--;
  }
 }
}

它会提供类似你的模式的输出..

12345
1234
123
12
1
12
123
1234
12345

答案 6 :(得分:-1)

你可以这样做。提取出使用的字符,如果您将来需要更改它。另外,请注意System.out.println仅在第一个for循环中,因此它并不复杂。有一种方法负责构建您需要打印的字符串。星数有两个计数器,当你变为零时,你切换y变量并开始计数。

public static final String CHARACTER = "*";

  public static void main(String args[]) {

    int x = 4;
    int y = 1;
    boolean hitZero = false;

    for (int i = 0; i < 7; i++) {
        System.out.println(buildStr(hitZero?y:x));

        if(x==1)
          hitZero = true;

       if(hitZero)
         y++;
       else
         x--; 
    }
  }

  private static String buildStr(int count) {
    String res = "";
    for(int i=0; i< count; i++)
      res+=CHARACTER;
    return res;
  }

<强>输出

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