如何在Java中构造金字塔
如何使用循环程序构造一个金字塔,通过用户的输入给定若干行?比如如何在Java中构造金字塔,java,loops,for-loop,while-loop,shapes,Java,Loops,For Loop,While Loop,Shapes,如何使用循环程序构造一个金字塔,通过用户的输入给定若干行?比如 * *** ***** ******* 我试着看了几段视频,读了一些关于这一逻辑的文章,但老师们要么不理解,要么跳过了推理 我知道每一行增加2颗星,而且我知道因为每一行有奇数个星,我可以将一行中的星数定义为2n+1,其中n是一个整数。我注意到一个2排三角形的底边是3颗星,一个3排三角形的底边是5颗星,依此类推。所以对于第n行,三角形底面是n+(n-1),也就是2n-1。例如,r_5:base=9颗星。接下来我知道我的程
*
***
*****
*******
我试着看了几段视频,读了一些关于这一逻辑的文章,但老师们要么不理解,要么跳过了推理
我知道每一行增加2颗星,而且我知道因为每一行有奇数个星,我可以将一行中的星数定义为2n+1,其中n是一个整数。我注意到一个2排三角形的底边是3颗星,一个3排三角形的底边是5颗星,依此类推。所以对于第n行,三角形底面是n+(n-1),也就是2n-1。例如,r_5:base=9颗星。接下来我知道我的程序需要考虑的是间距。我注意到,从底部开始,每行间距增加2,直到上半部分有n-1个空格,下半部分有n-1个空格,换句话说,间距从底部开始增加,直到大于或等于2b-2
我认为所有这些都涵盖了java程序需要知道的要点:每行星的数量、基的大小和间距。
但是我如何用for while循环来翻译所有这些呢 这是我的实现-
public static String repeat(String str, int times) {
return new String(new char[times]).replace("\0", str);
}
public void createPyramid(int size) {
for (int i = 1; i <= size; i += 2) {
int numSpaces = (size - i) / 2;
System.out.println(repeat(" ", numSpaces) + repeat("*", i) + repeat(" ", numSpaces));
}
}
公共静态字符串重复(字符串str,int次){
返回新字符串(新字符[次])。替换(“\0”,str);
}
公共虚空createPyramid(整数大小){
对于(int i=1;i方法1
请注意,如果我们将当前行号表示为从0开始的“行”,将行总数表示为“n”
每行中的星星数=2*行+1
每行中的前导(或尾随)空格数=n-行-1
我们可以使用以下规则简单地生成金字塔:
int n = 4;
for (int line = 0; line < n; line++) {
StringBuilder sb = new StringBuilder();
int starsToAppend = 2 * line + 1;
int spaceToAppend = n - line - 1;
while (spaceToAppend-- > 0) sb.append(" ");
while (starsToAppend-- > 0) sb.append("*");
System.out.println(sb.toString());
}
在两边加上零颗额外的星星(因为我们的线#是零),这会给我们(相同的字符串):
然后添加n-line-1(我们减去1,因为我们已经添加了1个字符-第一颗星)=该颗星每侧3个空格,这给了我们:
在第二次迭代中(第==1行),如果我们应用相同的逻辑:
一,
一旦你理解了逻辑,就很简单了。
有多种方法可以做到这一点,但其中最简单的是:)假设您需要打印一个由n
行组成的金字塔。您可以看到行i
(其中i
介于1和n
之间)将以n-i
空格开始,并有(i-1)*2+1
星号:
for (int i = 1; i <= n; ++i) {
int spaces = n-i;
int stars = (i-1)*2+1;
for (int j = 1; j <= spaces; ++j) {
System.out.print(' ');
}
for (int j = 1; j <= stars; ++j) {
System.out.print('*');
}
System.out.println();
}
用于(int i=1;我想得很清楚:for循环允许循环体执行X次,其中X是一个有限的已知数。想想你的金字塔中有什么是已知的有限数?你的程序在完成它的工作之前需要询问用户的一件事是什么?正如操作说明一样,你需要多个循环。请记住,当您知道有多少次迭代时,将使用for循环,而当迭代次数不确定时,将使用while循环。考虑到这些知识点和知识点以及您以前对代数的理解,请按照Stephen C所说的做,并尝试一下。忽略发布的解决方案——有些东西告诉我你已经知道,你会从苦苦寻找答案中得到更多。我自己也尝试过编码,但通常我只会得到奇怪的对角化星或一列星。虽然我自己尝试过,但在某种程度上确实有所帮助,它让我意识到需要多个循环。例如,我很高兴我在这里得到了很多回应,我会再尝试一下等我今天晚些时候醒来
*
*
...*...
*
***
^ This middle one is the first star
..***..
for (int i = 1; i <= n; ++i) {
int spaces = n-i;
int stars = (i-1)*2+1;
for (int j = 1; j <= spaces; ++j) {
System.out.print(' ');
}
for (int j = 1; j <= stars; ++j) {
System.out.print('*');
}
System.out.println();
}