Java

时间:2015-08-27 22:01:03

标签: java loops for-loop

我需要这样做:

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

我有这段代码:

for (int i=0; i<5; i++)
        {
            for (int j=5; j>i; j--)
            {    
                System.out.print("*");
            }
            System.out.println("");

输出:

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

我无法弄清楚如何实现这些空间。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:6)

您需要使用两个for循环:一个用于空格数,另一个用于*的数量:

for (int i = 0; i < 5; i++) {
    for (int j = 0; j < i; j++) {    
        System.out.print(" ");
    }
    for (int j = i; j < 5; j++) {    
        System.out.print("*");
    }
    System.out.println();
}

Java 8解决方案:

IntStream.range(0, 5).forEach(i -> {
    IntStream.range(0, i).forEach(j -> System.out.print(" "));
    IntStream.range(i, 5).forEach(j -> System.out.print("*"));
    System.out.println();
});

答案 1 :(得分:2)

如果你真的想让那些给你的作业评分的人惊叹的话,这是一个比其他答案少一个循环的解决方案:

for (int y = 0; y < 5; y++) {
    for (int x = 0; x < 5; x++) {
        System.out.print((x >= y) ? "*" : " ");
    }

    System.out.println();
}

答案 2 :(得分:1)

在每行开始之前打印k个空格。

要解决这类问题,如果你将其分解并观察模式将会很容易。

*****  0 space
 ****  1 space
  ***  2 spaces
   **  3 spaces
    *  4 spaces

注意到这种模式后,你会问自己能否打印出来?

0*****
1****
2***
3**
4*

我们看到这个数字类似于每一行的开头。因此我们可以利用变量i。 (你的外循环计数器),我们有..

for (int i=0; i<5; i++){
    System.out.println(i);
    for (int j=5; j>i; j--){ 
        System.out.print("*");
    }
    System.out.println("");
}

现在,您只需将每行开头的数字转换为空格数即可。

for (int i=0; i<5; i++){
    for(int k=0; k<i; k++)    //using i to control number of spaces
        System.out.println(" ");
    for (int j=5; j>i; j--){ 
        System.out.print("*");
    }
    System.out.println("");
}

答案 3 :(得分:0)

    int count = 6;
    for(int i=0; i<=count; i++) {

        for(int j=0; j<i; j++) {
            System.out.print(" ");
        }

        for (int j = 0; j <= (count - i); j ++) {
            System.out.print("*");
        }

        System.out.println();
    }

您可以将价值传递给计数,它的效果非常好。