刚才写pta的打印沙漏代码(使用Java),出了一点小问题,哪位大神来救救我!

作者在使用Java编写打印沙漏的代码时遇到问题,在PTA平台上仅获得4分,怀疑问题在于多余空格未被删除。请求助于解决格式错误问题。

刚才写pta的打印沙漏代码(使用Java),出了一点小问题,哪位大神来救救我!

我的代码如下:
import java.util.;
public class Main {
public static void main(String[] args){
Scanner reader=new Scanner(System.in);
int l=reader.nextInt();
char s=reader.next().charAt(0);
int n=0;
int i=0;
while(n<l){
i=i+1;
if(i==1){
n=n+i;
}else{
n=n+4
i-2;
}
if(n+4*(i+1)-2>l){
break;
}
}
char[][] ch=new char[2i-1][2i-1];
for(int j1=0;j1<2i-1;j1++){
for(int j2=0;j2<2
i-1;j2++){
ch[j1][j2]=s;
}
}
for(int j3=1;j3<2i-2;j3++){
if(j3<i){
for(int j4=1;j4<=j3;j4++){
ch[j3][j3-j4]=’ ';
ch[j3][2
i-1-j4]=’ ';
}
}else{
for(int j5=0;j5<2i-1;j5++){
ch[j3][j5]=ch[2
i-j3-2][j5];
}
}
}
for(char[] row:ch){
for(char col:row){
System.out.print(col+"");
}System.out.println();
}
System.out.println(l-n);
}
}
我的思路是先打印出一个行列数相等的字符数组,在用空格去替代,代码在eclipse运行过后没有问题,但在pta上显示格式错误,20分的题只能得到4分,后来我的室友说,可能是在每一行的字符后没有任何元素,就是应该把后面的空格元素删掉,然后我就陷入了自闭。。。
也有可能不是这个问题,哪位大神可以解救一下我吗?(我是个小白,代码写的很复杂也不规范,感谢大神们帮我看看该如何修改才能通过pta的检测)

### PTA 沙漏图案 Java 打印 实现代码 以下是基于题目描述和参考资料中的要求,提供一个完整的解决方案。该方案能够接收输入的字符数量 `N` 和指定符号,并按照沙漏形状打印。 #### 解决方案说明 为了完成此任务,需要遵循以下逻辑: 1. 计算可以构成的最大层数以及剩余未使用的字符数。 2. 构建每一层所需的星号数目,形成上半部分和下半部分的沙漏结构。 3. 将构建好的字符串逐行打印来,并在最后一行显示剩余字符的数量。 下面是具体的实现代码: ```java import java.util.Scanner; public class Sandglass { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); // 总字符数 char symbol = scanner.next().charAt(0); // 给定符号 int k = 1; // 层数计数器 while (5 * k * k - 4 * k + 1 <= N) { // 寻找最大可能的k值 k++; } k--; // 调整到实际可用的最大k值 int usedSymbols = 5 * k * k - 4 * k + 1; // 已使用字符总数 int remainingSymbols = N - usedSymbols; // 剩余字符数 StringBuilder resultBuilder = new StringBuilder(); for (int i = 0; i < k; i++) { String line = generateLine(symbol, k, i); // 生成当前行的内容 resultBuilder.append(line).append("\n"); } for (int i = k - 2; i >= 0; i--) { String line = generateLine(symbol, k, i); // 生成倒置的部分 resultBuilder.append(line).append("\n"); } System.out.println(resultBuilder.toString()); // 输沙漏图案 System.out.println(remainingSymbols); // 输剩余字符数 } private static String generateLine(char symbol, int k, int row) { int spacesCount = k - row - 1; int symbolsInRow = 2 * row + 1; StringBuilder sb = new StringBuilder(); for (int j = 0; j < spacesCount; j++) { sb.append(' '); // 添加前导空格 } for (int j = 0; j < symbolsInRow; j++) { sb.append(symbol); // 添加符号 } return sb.toString(); } } ``` #### 关键点解析 上述代码实现了以下几个功能模块: - **计算最大层数**:通过循环找到满足条件的最大正整数值 \( k \),使得总字符数不超过输入的 \( N \)[^1]。 - **生成每行内容**:利用辅助函数 `generateLine()` 来动态调整每行的空白符与符号比例[^2]。 - **上下两部分拼接**:分别处理沙漏的上部和下部,最终组合成完整图案[^3]。 - **输结果**:先打印整个沙漏图案,再单独一行展示剩余字符数[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值