【问题标题】:How do I print a half pyramid with numbers and stars together?如何打印带有数字和星星的半金字塔?
【发布时间】:2021-01-12 09:16:27
【问题描述】:

我正在尝试打印一个带有数字和星星的半金字塔,输出必须是这样的:

1 1 1 1 1 1 1
2 * * * * 2 
3 * * * 3
4 * * 4
5 * 5
6 6
7  

这是我到目前为止所做的代码:

public class numberplsustar {
    public static void main(String[] args) {
        int rows = 7, i, j, num;
        for (i = rows; i >= 1; i--) {
            for (j = 1; j <= i; ++j) {
                if (i >= 3 && i <= 6) {
                    System.out.print("* ");
                } else
                    System.out.print(i + " ");
            }
            System.out.println();
        }
    }
}

这是输出:

7 7 7 7 7 7 7 
* * * * * * 
* * * * * 
* * * * 
* * * 
2 2 
1 

【问题讨论】:

  • Kobe 如果您认为其中一个答案有帮助,请将其标记为已接受

标签: java loops for-loop nested-loops


【解决方案1】:

问题是您没有检查第一个字符和最后一个字符来打印值。同样从rows开始打印:7。

  • 您应该从1 (j=1) 开始打印,而不是每次j++ 递增值。

  • 您应该检查每个步骤中要打印的值:

    (i == rows || i == 2 || temp == 1) ? j : "*"

    打印j(数字):

    • i == rows : 第一行 (1 1 1 1 1 1 1)
    • i == 2 : 最后一行之前的行 (6 6)
    • temp == 1 : 用于行尾的数字

    否则打印*

试试这个:

public static void main(String[] args) {
    int rows = 7;

    for (int i = rows, j = 1; i > 0; i--, j++) {
        System.out.print(j);
        for (int temp = i - 1; temp > 0; temp--) {
            System.out.print(" " + ((i == rows || i == 2 || temp == 1) ? j : "*"));
        }
        System.out.print("\n");
    }
}

输出:

1 1 1 1 1 1 1
2 * * * * 2
3 * * * 3
4 * * 4
5 * 5
6 6
7

PS:在 Java 中,类名的第一个字母应根据命名约定大写。

【讨论】:

    【解决方案2】:

    只打印每个字符,如果它在轮廓上,则打印数字

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

    这段代码输出这个

    1 1 1 1 1 1 
    2 * * * 2 
    3 * * 3 
    4 * 4 
    5 5 
    6 
    

    回应您的评论: 这会起作用:

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

    输出是

    1 
    2 2 
    3 * 3 
    4 * * 4 
    5 * * * 5 
    6 6 6 6 6 6 
    
    

    【讨论】:

      【解决方案3】:

      解决方案

      • 检查是否i == 1(第一)行->打印i
      • 检查j是否在边缘 j==i || j == range -> print i
      • 其他打印"*"

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

      输出

        1 1 1 1 1 1 1 
        2 * * * * 2 
        3 * * * 3 
        4 * * 4 
        5 * 5 
        6 6 
        7 
      

      【讨论】:

        【解决方案4】:

        要在二维数组的某个角落打印三角形,可以使用两个嵌套的 for 循环(或流)和两个嵌套的条件语句(或三元运算符) .您的代码可能如下所示:

        int m = 7;
        IntStream.range(0, m)
            .mapToObj(i -> IntStream.range(0, m)
                // 'i' - row, 'j' - column
                .mapToObj(j ->
                    // triangle corner:
                    // upper left: 'i + j < m'
                    // lower right: 'i + j >= m - 1'
                    // lower left: 'i >= j'
                    // upper right: 'i <= j'
                    i + j >= m - 1 ?
                        // triangle boundaries:
                        // top: 'i == 0'
                        // bottom: 'i == m - 1'
                        // left: 'j == 0'
                        // right: 'j == m - 1'
                        // primary diagonal: 'i == j'
                        // secondary diagonal: 'i + j == m - 1'
                        i == m - 1 || j == m - 1 || i + j == m - 1 ?
                            // row number
                            (i + 1) + " "
                            // otherwise asterisk
                            : "* "
                        // otherwise whitespace
                        : "  ")
                // collect into one line
                .collect(Collectors.joining()).stripTrailing())
            // print line by line
            .forEach(System.out::println);
        

        输出:

                    1
                  2 2
                3 * 3
              4 * * 4
            5 * * * 5
          6 * * * * 6
        7 7 7 7 7 7 7
        

        int m = 7;
        for (int i = 0; i < m; i++) {
            String row = "";
            for (int j = 0; j < m; j++) {
                if (i <= j) {
                    if (i == 0 || j == m - 1 || i == j) {
                        row += (i + 1) + " ";
                    } else {
                        row += "* ";
                    }
                } else {
                    row += "  ";
                }
            }
            System.out.println(row.stripTrailing());
        }
        

        输出:

        1 1 1 1 1 1 1
          2 * * * * 2
            3 * * * 3
              4 * * 4
                5 * 5
                  6 6
                    7
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-05
          • 1970-01-01
          • 2015-07-01
          相关资源
          最近更新 更多