Java:显示由字符组成的奇数直角三角形

Java:显示由字符组成的奇数直角三角形,java,Java,我必须编写一个程序,将大小值转换为直角三角形(由#字符组成),以便输出如下所示: # # ### ##### # ### ##### ####### 第一个三角形的大小为1。 第二个三角形的大小为4。 第三个三角形的大小为6。 请注意,给定三角形中每行的字符数总是奇数。 还请注意,每个三角形在最大点的高度可以通过size/2+1 我尝试过这个问题,但我一直在想如何在每行显示正确数量的符号 以下是我自己的代码: public class triangle

我必须编写一个程序,将大小值转换为直角三角形(由
#
字符组成),以便输出如下所示:

#

    #
  ###
#####

      #
    ###
  #####
#######
第一个三角形的大小为1。 第二个三角形的大小为4。 第三个三角形的大小为6。 请注意,给定三角形中每行的字符数总是奇数。 还请注意,每个三角形在最大点的高度可以通过
size/2+1

我尝试过这个问题,但我一直在想如何在每行显示正确数量的
符号

以下是我自己的代码:

public class triangle {

    public static void drawTriangle(int size) {
        int column = (size/2) + 1;

            for (int i = 0; i <= column; i++) {
                for (int j = size; j >= 0; j--) {
                    if (i <= j) {
                        System.out.print(" ");
                    }
                    else {
                        System.out.print("#");
                    }
                }
                System.out.println();
            }
    }

    public static void main(String[] args) {
        drawTriangle(1);
        drawTriangle(4);
        drawTriangle(6);
    }
}
正如你所看到的,我以正确的方式排列了三角形,并且得到了每个三角形的高度。我只是不知道如何才能从每一行的字符中得到正确的数字

我尝试了几件事,包括将我的第一个for循环从:

for (int i = 0; i <= column; i++)

感谢您的帮助。

让我们从代码中退一步,用英语思考这个问题。第一次尝试这样做让我想到以下几点:

For each row
    output the correct number of spaces and #s

第一行显示外部for循环需要计算行数。我认为这是存储在
size
变量中的。我由此得出结论,for循环是反向的。外部循环应该迭代行,内部循环应该迭代列。

使用了一个简单的StringUtil,但是您也可以不用它来编写它

public static void drawTriangle(int size) {
    int maxRow = size + 1;
    for (int i = 1; i <= maxRow; i+=2) {
        System.out.println(StringUtils.repeat(" ", maxRow-i) + StringUtils.repeat("#", i));
    }
}
publicstaticvoiddrawtriangle(int-size){
int maxRow=大小+1;
对于(inti=1;i,给你:

public static void drawTriangle(int size) {
    for (int i = 1; i <= size + 1; i += 2) {
        for (int spaces = 0; spaces <= size - i; spaces++) {
            System.out.print(" ");
        }
        for (int hashes = 0; hashes < i; hashes++) {
           System.out.print("#");
        }
        System.out.println();
    }

    System.out.println();
}
publicstaticvoiddrawtriangle(int-size){

对于(int i=1;i对于给定的
大小
,每行包含
大小+1个
字符(可以是“”,也可以是“#”)。第一行的前导空格数为
大小
,每行的前导空格数减少2

此简单方法实现了上述规则:

public static void drawTriangle(int size) {
    int nSpaces = size;
    for (int i = (size/2) + 1; --i >= 0; ) {
        for (int j = 0; j <= size; j++) {
            System.out.print(j < nSpaces ? ' ' : '#');
        }
        System.out.println();
        nSpaces -= 2;
    }
}
publicstaticvoiddrawtriangle(int-size){
int nSpaces=大小;
对于(inti=(大小/2)+1;--i>=0;){

对于(int j=0;j,请显示您尝试的更改的示例输出,并解释输出与您想要的不同之处。我编辑了我的问题…如果您注意到我的输出与我想要的有很大不同。有没有不使用StringUtils的方法?是的,编写您自己的
repeat()
方法。它没有那么复杂。如果你只是想跳过
i
的所有偶数值,为什么不让它迭代奇数,就像
中的(int i=1;我很高兴能提供帮助。我添加了一点说明来帮助您理解它。通过一点巧妙的操作,您可以完全删除
lineLen
iterations
变量。感谢您的建议。我在回答中更改了代码,以显示修改和改进后的代码。
public static void drawTriangle(int size) {
    int maxRow = size + 1;
    for (int i = 1; i <= maxRow; i+=2) {
        System.out.println(StringUtils.repeat(" ", maxRow-i) + StringUtils.repeat("#", i));
    }
}
public static void drawTriangle(int size) {
    for (int i = 1; i <= size + 1; i += 2) {
        for (int spaces = 0; spaces <= size - i; spaces++) {
            System.out.print(" ");
        }
        for (int hashes = 0; hashes < i; hashes++) {
           System.out.print("#");
        }
        System.out.println();
    }

    System.out.println();
}
public static void drawTriangle(int size) {
    int nSpaces = size;
    for (int i = (size/2) + 1; --i >= 0; ) {
        for (int j = 0; j <= size; j++) {
            System.out.print(j < nSpaces ? ' ' : '#');
        }
        System.out.println();
        nSpaces -= 2;
    }
}