我已经远远地搜索了我遇到的这个问题的解决方案。我正在走上正轨(我想),但没有正确地思考一些逻辑,所以想知道我是否能为此得到一些帮助。
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < i; j++)
{
System.out.print(" ");
}
System.out.println("#");
}
for (int l = 0; l < 6; l++)
{
for (int m = 6; m > l; m--)
{
System.out.print(" ");
}
System.out.println("#");
}
Output: #
#
#
#
#
#
#
#
#
#
#
#
我想要实现的是
output:
# #
# # #
# # #
# # #
# # #
# # #
# #
答案 0 :(得分:0)
这是一些帮助,在明确和突出显示的步骤中,所以你可以阅读第一个并尝试,然后转到下一个...为了避免破坏解决方案:)
观察到模式有点规律,但每行开头都有一些“噪音”......首先,尽量避免打印初始空格。而不是
# #
# # #
# # #
# # #
# # #
# # #
# #
考虑
# #
# # #
# # #
# # #
# # #
# # #
# #
显然,每行的大小与第一个#
到最后一个#
的大小相同。所以,你必须“在中间移动一个。基本上,这意味着每一行都由固定的#
,空格,可移动的#
,空格,另一个固定的#
组成。
你如何“移动”中间人? 总空格数是否会发生变化?第一个和最后一个#
之间的空格数不会改变。
因此,您有固定数量的空格(例如10),但您在其间插入了一些内容。空间的模式将是这样的:0#10,1#9,2#8,...,9#1,10#0。你如何用一个循环来做到这一点?
答案 1 :(得分:0)
我不会解决生成所需图表的解决方案。相反,我想评论原始代码中的几个错误。
您发布的代码有2个主要for循环。每个,根据你设定的条件:
int i = 0; i < 6; i++
会导致
System.out.println("#");
在六条不同的行上打印6“#”。
由于你有两个for循环执行println(),它们将导致程序总共显示12行,而不管每个main for循环中的子for循环,因为sub-for循环仅用于显示白色打印“#”之前的空格。
答案 2 :(得分:0)
将输出存储在char double数组中,然后在遍历数组时替换斑点。
int height = 6;
int peeks = 5;
// the top and bottom peaks share a point with eachother
// so for every down and up there are "2*height - 2" points
// the last peak has no connection, so add 1
int duration = (peeks*2*(height - 1)) + 1;
// create a double array and fill it with spaces
char[][] output = new char[height][duration];
for(int i = 0; i < height; i++){
for(int j = 0; j < duration; j++){
output[i][j] = ' ';
}
}
// keep track of if we are going up or down
boolean increment = true;
for(int distance = 0, level = 0; distance < duration; distance++){
// mark every point in the path
output[level][distance] = '#';
if (level == 0){
increment = true;
}
else if (level == height -1){
increment = false;
}
level += increment? 1 : -1;
}
// print each line in the double array
for(int i = 0; i < output.length; i++){
System.out.println(String.valueOf(output[i]));
}
答案 3 :(得分:0)
我确信有一个更优雅的解决方案,但这里有一些具有您所要求的确切输出的粗暴算法:
int spaceCount1 = 9;
int spaceCount2 = 11;
int spaceCount3 = 0;
int j = 1;
for(int row = 0; row < 7; row++){
System.out.println();
for(int i = 0; i < spaceCount1; i++){
System.out.print(" ");
}
spaceCount1++;
for(j = 1; j <= 1; j++){
System.out.print("#");
}
j--;
for(int i = spaceCount2; i > 0; i--){
System.out.print(" ");
}
spaceCount2 -= 2;
for(j = 1; j <= 1 && row < 6; j++){
System.out.print("#");
}
j--;
for(int i = 1; i < spaceCount3 ; i++){
System.out.print(" ");
}
spaceCount3 += 2;
for(j = 1; j <= 1 && row > 0; j++){
System.out.print("#");
}
j--;
}
输出:
# #
# # #
# # #
# # #
# # #
# # #
# #