对于循环,每行打印一个int加2

时间:2013-01-07 20:32:57

标签: java for-loop increment

好的,所以我正在为我的Comp Programming类编写一个程序,我需要创建一个占用行数的程序,并通过向行添加2来打印金字塔。视觉效果如下所示:Given that the input for rows is: 5

所以输入为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 *。

6 个答案:

答案 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)

有几种方法可以做到这一点

  1. 在循环中,将2添加到累积变量。
  2. 通过根据行导出长度公式来计算该变量的整个值。
  3. 第一种方法可能就是你要使用的方法,但第二种方法在未来的工作中有更好的机会。由于这个程序可能没有太多的未来(这是一个常见的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;
                         }
        }