gpt4 book ai didi

java - 根据用户输入生成字母金字塔

转载 作者:行者123 更新时间:2023-11-30 09:35:35 25 4
gpt4 key购买 nike

我在完成这项家庭作业时遇到了问题,需要一些帮助。我不想要解决方案,因为我想从中学习。

我们正在使用循环制作字母金字塔。我似乎无法弄清楚如何将这些 FOR 循环放在一起以按照指示进行这项工作。

用户应输入一个字母(或其他会出错的字符),然后程序会将字母转换为大写(如果尚未转换)。转换为大写字母后,使用循环从字符“A”到用户输入的任何内容,然后再次返回“A”。下面是一个例子。

我附上了我想出的代码,但程序的输出应该如下所示,但这些行应该是空格。我只是为间距添加了它们:

输入一个字母(输入字母显示金字塔):E

____A
___ABA
__ABCBA
_ABCDCBA
ABCDEDCBA

我的输出很简单:

Please enter a single letter:
f
ABCDEFEDCBA

代码如下:

import java.util.*; // For using Scanner class for input

public class LetterPyramid {
public static void main(String[] args) {
Scanner key = new Scanner(System.in);
System.out.println("Please enter a single letter:");
char input = key.next().charAt(0);
input = Character.toUpperCase(input);
if (!(Character.isLetter(input))) {
System.out.println("Error: Invalid letter: " + input);
} else {
for (int i = input; i < 'Z'; i++) {
System.out.print(" ");
}
}
for (char y = 'A'; y < input; y++) {
System.out.print(y);
if (y == input) {
System.out.println(y);
}
}
for (char x = input; x >= 'A'; x--) {
System.out.print(x);
}
System.out.println();
}
}

最佳答案

我将您的程序精简为正在运行的核心算法:打印树。

所以,这是我想出的,还有一个 demo这样您就可以看到它在工作。

但首先,一个解释:

这使用一个名为 middlechar 变量来跟踪我们即将打印的当前中间字符是什么。这很有用,因为我们可以创建 while 循环,它声明我们应该在当前 middle 字符小于或等于 时继续打印树>输入字符。

我还使用 spaces 计算了第一行左侧所需的空格数。这是一个小技巧,让我们看看这一行:

int spaces = input - (int) 'A'; // Might be a better way to do w/o cast

我们将空格数归一化,使其范围从 0 到 X,而不是 65 到 (​​X + 65)。因此,对于 A 的输入,spaces 将为 0,这是有道理的,因为如果输入只是 A。如果 inputBspaces 将是 1,因为我们会在第一行打印一个空格。

然后就是设置循环的问题了:

  1. 打印左侧空格,范围从 0 到 空格
  2. 打印树的左侧,包括中间,范围从Amiddle
  3. 打印树的右侧,范围从中间 - 1A
  4. 首先用相同的循环打印右侧空格(这是不必要的,因为它在控制台中不可见)

最后,我们打印一个换行符,然后需要调整我们的标志。所以我们减少 spaces,因为我们刚刚打印了一行输出,并且增加了 middle,因为我们希望下一行的 middle 字符是打印后的下一个字符。

这是注释代码,我从中学到了更好的东西,所以希望我已经解释得足够好。如果您有任何疑问,请随时提问。

    char middle = 'A'; int spaces = input - (int) 'A';
while( middle <= input) {

// Print the left side spaces
for( int i = 0; i < spaces; i++)
System.out.print(" ");

// Print the left side of the tree (including the middle)
for( char y = 'A'; y <= middle; y++)
System.out.print( y);

// Print the right side of the tree
for( char y = Character.toChars( middle - 1)[0]; y >= 'A'; y--)
System.out.print( y);

// Print the right side spaces
for (int i = 0; i < spaces; i++)
System.out.print(" ");

// Print a new line
System.out.println();

// Subtract 1 from the number of spaces we need
spaces--;

// Increment the middle character
middle++;
}

输入 F,将生成:

     A     
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA

关于java - 根据用户输入生成字母金字塔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11293710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com