我需要帮助解决沙漏任务中的间距问题,这里有说明
说明
给定参数size = n和字符符号。
您可以假设n是正奇数。
沙漏由n行组成。
字符符号将在每一行中出现多次。该符号将在第一行中出现n次。打印符号在每个后续行中减少2的次数,直到达到1.之后,在每个后续行中打印符号的次数将增加2,直到再次达到n。
将空格添加到每行的开头和结尾,以使每行的总宽度为n,并且每行中的符号在每行的中心对齐。 对于输出,您可以使用System.out.print()/ println()或IO.output()/ outputln()。
这是我的代码:
public static void hourglass(int size, char symbol){
int subtract = (int)Math.floor(size / 2);
for(int i = size - subtract; i >= 1; i--){
for(int j=i;j<size - subtract;j++)
System.out.print(' ');
for(int j=1;j<=i*2-1;j++)
System.out.print(symbol);
System.out.println();
}
for(int i = 2; i <= size - subtract; i++)
{
for(int j=i;j<size - subtract;j++)
System.out.print(' ');
for(int j=1;j<=i*2-1;j++)
System.out.print(symbol);
System.out.println();
}
}
我想要做的就是指令集五。我已经阅读了很多关于阵列填充和\ s +的帖子来删除间距,但这不是我想要的。基本上我想要做的是在绘制沙漏之后在沙漏的左右两侧均匀间距。
她是我问题的一个例子:
鉴于沙漏的大小为3. printHourglass()的预期输出:
???¶
█?█¶
???¶
您的代码输出:
█???¶
██?¶
█???¶
我一直在努力解决,需要尽快提交。请再次提出一些提示。
我已附上图片,以防文字无法正确显示问题。
答案 0 :(得分:1)
您是否将代码粘贴到此处? 很抱歉,但格式非常糟糕。 请决定始终使用括号,但有时不使用括号。我建议你总是使用它们,因为它使事情变得更加清晰。还要保持良好的缩进:
public static void hourglass(int size, char symbol){
int subtract = (int)Math.floor(size / 2);
for(int i = size - subtract; i >= 1; i--){
for(int j=i;j<size - subtract;j++){
System.out.print(' ');
}
for(int j=1;j<=i*2-1;j++){
System.out.print(symbol);
}
System.out.println();
}
for(int i = 2; i <= size - subtract; i++)
{
for(int j=i;j<size - subtract;j++){
System.out.print(' ');
}
for(int j=1;j<=i*2-1;j++){
System.out.print(symbol);
}
System.out.println();
}
}
接下来发布的代码是,我无法验证您的输出,因为我得到以下内容: (请注意:为了可见性,我使用?作为字符和a。而不是空格)
//Size 3
???
.?
???
//Size 5
?????
.???
..?
.???
?????
编辑1: 您需要做的是,在字符添加逻辑之后添加空格添加逻辑。 找到一个有效的循环逻辑是你的工作。
for(int i = size - subtract; i >= 1; i--){
for(int j=i;j<size - subtract;j++){
System.out.print(' ');
}
for(int j=1;j<=i*2-1;j++){
System.out.print(symbol);
}
for(/*find a working loop*/){
System.out.print(' ');
}
System.out.println();
}
for(int i = 2; i <= size - subtract; i++)
{
for(int j=i;j<size - subtract;j++){
System.out.print(' ');
}
for(int j=1;j<=i*2-1;j++){
System.out.print(symbol);
}
for(/*find a working loop*/){
System.out.print(' ');
}
System.out.println();
}
答案 1 :(得分:0)
我在Korashen的帮助下找到了循环,这就是我的代码看起来像所有打印完美的
代码打印由a表示的间距。以及在我看来提供完美输出的符号
public class hourglass
{
public static void hourglass(int size, char symbol){
int subtract = (int)Math.floor(size / 2);
for(int i = size - subtract; i >= 1; i--){
for(int j=i;j<size - subtract;j++){
System.out.print('.');
}
for(int j=1;j<=i*2-1;j++){
System.out.print(symbol);
}
for(int j = i; j < size - subtract; j++){
System.out.print('.');
}
System.out.println();
}
for(int i = 2; i <= size - subtract; i++)
{
for(int j=i;j<size - subtract;j++){
System.out.print('.');
}
for(int j=1;j<=i*2-1;j++){
System.out.print(symbol);
}
for(int j = i; j < size - subtract; j++){
System.out.print(".");
}
System.out.println();
}
}