如何从用户输入和降序开始打印字母金字塔?

时间:2017-05-19 14:43:41

标签: java

这是家庭作业,我需要帮助了解如何以及为什么。

我试图在线跟踪大量的例子,但他们都以硬编码'A'作为起点,而且我没有根据我的具体需要对这些例子进行逆向工程。

我必须打印一个以用户输入开头的字母金字塔(也定义金字塔的高度),假设用户键入E,如下所示:

E
ED
EDC
EDCB
EDCBA

我的第一个问题是我不明白如何将用户输入字母作为每一行的起点。

这是Java,我不能使用数组或字符串,只能使用char和int。

有人可以解释实现这个的逻辑吗?

这是我的第一步,这就是我所知道的:

intHeight = chrUserLetter - 'A' + 1; 
chrCurrentLetter = chrUserLetter;

for ( intRowIndex = 1; intRowIndex <= intHeight; intRowIndex += 1 )
{
    for ( intColumnIndex = 1; intColumnIndex <= intRowIndex; intColumnIndex += 1)
    {
        System.out.print( chrCurrentLetter );
        chrCurrentLetter -= 1;              
    }

    System.out.println();                           
}

输出是:

E
DC
BA@
?>=<
;:987

2 个答案:

答案 0 :(得分:1)

只需移动第一行chrCurrentLetter = chrUserLetter;即可重新初始化

public class Test {
    public static void main(String[] args) {
        char chrUserLetter='E';
        int intHeight = chrUserLetter - 'A' + 1;

        for ( int intRowIndex = 1; intRowIndex <= intHeight; intRowIndex += 1 )
        {
            char chrCurrentLetter = chrUserLetter;
            for (int intColumnIndex = 1; intColumnIndex <= intRowIndex; intColumnIndex += 1)
            {
                System.out.print( chrCurrentLetter );
                chrCurrentLetter -= 1;
            }

            System.out.println();
        }
    }
}

答案 1 :(得分:1)

您需要重置下一行中的chrCurrentLetter变量。将赋值移动到外部for循环中:

intHeight = chrUserLetter - 'A' + 1; 

for ( intRowIndex = 1; intRowIndex <= intHeight; intRowIndex += 1 )
{
    chrCurrentLetter = chrUserLetter;
    for ( intColumnIndex = 1; intColumnIndex <= intRowIndex; intColumnIndex += 1)
    {
        System.out.print( chrCurrentLetter );
        chrCurrentLetter -= 1;              
    }

    System.out.println();                           
}

说明:如果仅指定chrCurrentLetter一次,那么对于第一次迭代,它将为E。然后你递减一次,当你添加下一次迭代时它是D,依此类推。每当您获得所需结果时,将其重置为E