这是家庭作业,我需要帮助了解如何以及为什么。
我试图在线跟踪大量的例子,但他们都以硬编码'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
答案 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
。