7-33 空心字母金字塔 (10 分)
输入一个大写的英文字母,输出空心的字母金字塔。
输入格式:
一个大写英文字母。输出格式:
一个空心的大写英文字母金字塔,其中第1层的“A”在第1行的第40列,列从1开始计数。输入样例:
E
输出样例:
A
B B
C C
D D
EEEEEEEEE
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
String N = scanner.nextLine();
StringBuilder b = new StringBuilder(" "); //39个空格
String c = " ";
int k = 1;
for (char i = 'A'; i < N.charAt(0); i++) {
System.out.print(b);
if (i == 'A'){
System.out.println(i);
}else {
System.out.print(i);
System.out.print(c);
System.out.println(i);
c += " ";
}
b.delete(0,1);
k++;
}
System.out.print(b);
for (int i = 0; i < 2*k -1; i++) {
System.out.print(N);
}
}
}
代码解释
1.StringBuilder
在程序开发过程中,我们常常碰到字符串连接的情况,方便和直接的方式是通过"+"符号来实现,但是这种方式达到目的的效率比较低,且每执行一次都会创建一个String对象,即耗时,又浪费空间。使用StringBuilder类就可以避免这种问题的发生。
一、创建Stringbuilder对象
StringBuilder strB = new StringBuilder();
1、append(String str)/append(Char c):字符串连接
System.out.println("StringBuilder:"+strB.append("ch").append("111").append('c'));
//return "StringBuilder:ch111c"
2、toString():返回一个与构建起或缓冲器内容相同的字符串
System.out.println("String:"+strB.toString());
//return "String:ch111c"
3、appendcodePoint(int cp):追加一个代码点,并将其转换为一个或两个代码单元并返回this
System.out.println("StringBuilder.appendCodePoint:"+strB.appendCodePoint(2));
//return "StringBuilder.appendCodePoint:ch111c"
4、setCharAt(int i, char c):将第 i 个代码单元设置为 c(可以理解为替换)
strB.setCharAt(2, 'd');
System.out.println("StringBuilder.setCharAt:" + strB);
//return "StringBuilder.setCharAt:chd11c"
5、insert(int offset, String str)/insert(int offset, Char c):在指定位置之前插入字符(串)
System.out.println("StringBuilder.insertString:"+ strB.insert(2, "LS"));
//return "StringBuilder.insertString:chLSd11c"
System.out.println("StringBuilder.insertChar:"+ strB.insert(2, 'L'));
//return "StringBuilder.insertChar:chLLSd11c"
6、delete(int startIndex,int endIndex):删除起始位置(含)到结尾位置(不含)之间的字符串
System.out.println("StringBuilder.delete:"+ strB.delete(2, 4));
//return "StringBuilder.delete:chSd11c"
2.charAt()
charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。
3.使用string N的原因是为了可以在循环中使用,不引起数据类型错误。
4. b.delete(0,1);
使用b.delete 每循环一次减去一个39个空格中的一个。
5.for (char i = 'A'; i < N.charAt(0); i++)
循环次数小于N.charAt(0)时,
System.out.print(b);//输出39个空格
if (i == 'A'){
System.out.println(i);
}else {
System.out.print(i);
System.out.print(c);
System.out.println(i);
c += " ";//下一个字母中间增加2个空格
}
b.delete(0,1);//每循环一次删除一个空格
k++;
循环次数等于N.charAt(0)时,
System.out.print(b);//输出39个空格
for (int i = 0; i < 2*k -1; i++) {
System.out.print(N);//输出2*k -1个最后字母
}