Java:显示由字符

时间:2016-09-01 22:30:33

标签: java

我必须编写一个带有大小值并将其转换为直角三角形(由#个字符组成)的程序,以使输出看起来像:

#

    #
  ###
#####

      #
    ###
  #####
#######

第一个三角形的大小为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 (int i = 1; i <= column; i+=2)

过滤掉偶数行,但无法解决其他参数,例如每个三角形的高度和其他行。以下是我的更改的输出:

 #
    #
  ###
      #
    ###

感谢任何帮助,谢谢。

4 个答案:

答案 0 :(得分:3)

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

##  Person       date account  Keep
##1    abc 2016-04-01     123     1
##2    abc 2016-04-03     123     1
##3    abc 2016-04-12     123     0
##4    eee 2016-05-03     222     1
##5    eee 2016-05-04     222     1
##6    eee 2016-05-04     333     1
##7    eee 2016-05-06     222     1
##8    eee 2016-05-10     333     0

第一行显示外部for循环需要计算行数。我认为这存储在您的For each row output the correct number of spaces and #s 变量中。我从中得出结论,你的for循环是相反的。外循环应遍历行,内循环应迭代列。

答案 1 :(得分:2)

使用了一个简单的StringUtil,但你也可以在没有它的情况下编写它。

__init__

答案 2 :(得分:2)

你走了:

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();
}

正如Code-Apprentice所说,有一个主for循环来显示三角形中的每一行是有意义的。然后,为了在每一行中显示正确数量的空格和散列,我使用了两个嵌套的for循环。

更新:简化和改进的代码(使用Code-Apprentice的建议)

答案 3 :(得分:-1)

对于给定的size,每行包含size + 1个字符(&#34;&#34;或&#34;#&#34;)。第一行中的前导空格数为size,每行的数量减少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;
    }
}