好的,所以我正在为我的Comp Programming类编写一个程序,我需要创建一个占用行数的程序,并通过向行添加2来打印金字塔。视觉效果如下所示:
所以输入为5,因为你看到它产生5行并且每行增加2 *。好吧,我不确定如何以2为增量增加*的数量。到目前为止,这是我的代码:
public static void pyramid(){
System.out.println("Columns:");
rows = input.nextInt();
for(int s = 0; s <= rows; s++){
for(){
}
}
}
我在第一个内部开始了另一个for循环,因为我知道我需要它才能使这个工作。我的问题是,如何让它在每一行下降时加上2 *。
答案 0 :(得分:2)
每行* s的数量是2*s + 1
,对吧?因此,通过在每个循环中循环到该数字并每次输出*
,这非常容易计算。
你还需要在每组* s之前写出正确的空格数 - 这也是s
的函数 - 尝试几个数字,看看你是否可以找出函数。一旦你的功能正确,只需在主循环中循环到该数字,每次都添加空格。
答案 1 :(得分:1)
以下是一些提示:
对于n
行,您需要以(n - 1)
个空格开头。要么在一个简单的嵌套循环中自己输出这些空格,要么使用Arrays.fill(chars, '0')
创建一个可以传递给new String()
的字符数组。您可以使用substring()
在每次迭代中删除一个空格。
您需要从一个*
开始。对于后续行,您可以执行s = s + "**"
,但使用StringBuffer
会更有效。
FWIW,这是我现在能想到的最好的:
static void pyramid(int n) {
// create first line
StringBuffer out = new StringBuffer(2 * n + 1);
for (int i = 0; i < n - 1; ++i) {
out.append(' ');
}
out.append('*');
// repeatedly remove a space and add two stars
while (n-- > 0) {
System.out.println(out);
out.deleteCharAt(0);
out.append("**");
}
};
答案 2 :(得分:1)
要执行此任务,您需要两个嵌套循环。第一个计算当前行所需的星数。打印空间内的循环(制作“漂亮的树”)和打印星星
public static void pyramid(int numberOfRows){
int curentAmountOfStars = 1; // first row has one star
for(int i = 0; i < numberOfRows; i++){
for(int j=0; j<numberOfRows-i-1;j++){ // this for prints spaces
System.out.print(" ");
}
for(int j= curentAmountOfStars; j>0; j--){ //this one prints stars
System.out.print("*");
}
System.out.println(); //go to new row
curentAmountOfStars += 2; // increase amount of stars
}
}
结果你有一棵美丽的树!
*
***
*****
*******
*********
***********
*************
答案 3 :(得分:1)
如果您使用迭代方法查看问题(正如我所建议的那样)。您会发现,您正在寻找的并不是在循环中为每个int添加三个。
让我们从金字塔的一半开始吧。这样做需要一个简单的循环。 (我将在Python中运行它,使其有点像伪代码):
def pyramid(rows):
for row_num in range(1,rows+1):
print '*' * row_num
这为我们提供了5的以下输出:
*
**
***
****
*****
我们在那里,我们现在真正需要的是从另一侧金字塔中间开始的镜像。
对于初学者,如果我们看到它总是比行数小两倍的事实,我们可以计算出每行的星数。 (1,3,5,7等)
这给了我们以下代码:
def pyramid(rows):
for row_num in range(1,rows+1):
num_stars = (row_num * 2) - 1
print '*' * num_stars
产生以下输出:
*
***
*****
*******
*********
现在我们唯一缺少的就是对齐。为了计算每条线正确缩进所需的空间数,我们可以再次查看该模式。在这种情况下,为了使线条居中,我们需要将每一行偏移一个以每行一个的速率减小的值。
第一行开始前需要四个空格,第二行开始需要三个等等。那么,该值相对于什么?行数本身。
我们可以从这种模式中识别出,偏移输出所需的空格数实际上等于行数减去row_num。这给了我们以下代码:
def pyramid(rows):
for row_num in range(1,rows+1):
num_stars = (row_num * 2) - 1
offset = rows - row_num
print (' ' * offset) + ('*' * num_stars)
现在我们得到最终结果:
*
***
*****
*******
*********
而且......我们已经完成了!
为简洁起见,我在此代码示例中使用了Python。由于您使用的是较低级别的语言,因此您无法将字符相乘以生成字符串。
许多人会说&#34;写一些嵌套循环&#34;。我,我相信编写一个模仿高级语言所需功能的功能是最好的。
如果您可以为您执行字符串乘法功能,则可以使用相同的代码两次!
如果Python没有内置字符串乘法,您可以轻松地处理如下函数:
def multiply_char(char,number_of_times):
s = ''
for i in range(number_of_times):
s += char
return s
现在你可以在这个赋值中使用该函数两次,并且在没有嵌套循环的情况下保持代码看起来更清晰(以后函数调用不会提供可读性)。
我们打破这些小程序的方式是编写优秀代码的一半。你的老师正试图让你分析并将问题分解成更小的一部分。从执行某些操作的代码开始,然后对其进行迭代直到功能完成为止,这是一个好主意。
快乐的编码!
答案 4 :(得分:0)
有几种方法可以做到这一点
第一种方法可能就是你要使用的方法,但第二种方法在未来的工作中有更好的机会。由于这个程序可能没有太多的未来(这是一个常见的CS 101类型的家庭作业问题)我猜你会选择#1。
int numAsterisks = 1;
for (row = 0; ...) {
doStuff();
numAsterisks += 2;
}
第二种方法是意识到你为每一行添加两个
numAsterisks = 2*row + 1;
最后一种技术的主要优势是numAsterisks的后续值不会出错,即使过多的因素会使numAsterisks的某个中间值陷入混乱。一个较小的优点是您不需要存储numAsterisks的中间值,因此可能也可以使用运行速度更快的代码(只有分析才能确定)。
答案 5 :(得分:-1)
我看到你是如何尝试这个但是可能一个while循环会更容易,然后只需使用字符串操作来创建你想要的每一行。
public static void pyramid(){
line=1;
i=1;
while(line <= 5){
System.out.println("*"*i);
i +=2;
line +=1;
}
}
另外我不知道你的意思是“将星星增加3”你的意思是每行的星数会增加(1,4,7,10)或加速3,如num + 2,num + 5,num + 8喜欢(1,3,8,16)。
如果你想以第二种方式做到这一点,这应该可行。
public static void pyramid(){
line=1;
i=1;
a=3;
while(line <= 5){
System.out.println("*"*i);
i += 2+a*(i-1);
line +=1;
}
}