Java - 如何创建交替的三角形金字塔?

时间:2016-09-24 00:48:38

标签: java

我正在尝试创建一个交替的三角形金字塔" *"和" o"字符,行数基于用户输入。我试图实现的预期输出,如果用户输入" 6"对于行数,是:

      *
     *o*
    *o*o*
   *o*o*o*
  *o*o*o*o*
 *o*o*o*o*o*

我为实现这一目标而编写的代码是:

String star = "*";
String circle = "o";
System.out.println("Please enter number of rows: ");
int rows = in.nextInt();
for (int i = 0; i < rows; i++){
    for (int j = 0; j < rows-i; j++){
        System.out.print(star);
    }
    for (int k = 0; k <= i; k++){
        System.out.print(circle);
    }
    System.out.println();
}

但是,我的代码输出与上面的金字塔不匹配。用户输入&#34; 6&#34;的代码输出为:

******o
*****oo
****ooo
***oooo
**ooooo
*oooooo

在这个网站和其他网站上花了最后三个小时后,我仍然在如何交替角色,如何在每一行中拥有正确数量的字符,以及如何将金字塔格式化为预期输出是。我不知道我的代码是完全错误的,或者我是否只是错过了一部分以使其正常工作,但是非常感谢任何建议或参考。

6 个答案:

答案 0 :(得分:5)

你可以采用另一种更简单的方式来接近它。

在伪代码中:

  • 创建一个n空格
  • 的字符串
  • 向其添加"*"
  • 循环n次,循环的每次迭代:
    • 打印
    • " *"替换为"*O*"

这可以识别创建第一行的简单方法,以及从上一行创建下一行的简单方法。每个替换只匹配最后(前导)空间和第一个星,用星号替换空间,用O替换星星并添加星号。

通常,解决难题的最佳方法是以一种简单问题(或简单问题集合)的方式来看待它。

创建n空格字符串的几种方法:

  • 每次迭代添加' '的循环
  • new String(new char[n]).replace('\0', ' ')

如何用其他字符替换String的某些字符:

str = str.replace(" *", "*O*");

答案 1 :(得分:2)

此方法可以正常工作:

public void printPyramid (int input) {
    for (int row = 1; row <= input; row++) {
        for (int whitespace = input - 1; whitespace >= row; whitespace--) {
            System.out.print(" ");
        }
        System.out.print("*");
        for (int circle = 1; circle < row; circle++) {
            System.out.print("o*");
        }
        System.out.println();
    }
}
                         *
                        *o*
                       *o*o*
                      *o*o*o*
                     *o*o*o*o*
                    *o*o*o*o*o*
                   *o*o*o*o*o*o*
                  *o*o*o*o*o*o*o*
                 *o*o*o*o*o*o*o*o*
                *o*o*o*o*o*o*o*o*o*
               *o*o*o*o*o*o*o*o*o*o*
              *o*o*o*o*o*o*o*o*o*o*o*
             *o*o*o*o*o*o*o*o*o*o*o*o*
            *o*o*o*o*o*o*o*o*o*o*o*o*o*
           *o*o*o*o*o*o*o*o*o*o*o*o*o*o*
          *o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*
         *o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*
        *o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*
       *o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*
      *o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*
     *o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*

答案 2 :(得分:1)

欢迎使用Stack Overflow! 首先,&#34; o&#34;和&#34; *&#34; s不是交替的,因为for循环执行直到完成。这意味着星星和圆圈将分别打印出来。对于这个应用程序,你只需要一个for循环和两个if语句,基于&#34; i&#34;在for循环中是奇数或偶数。一个简单的方法是使用模数函数:

String star = "*";
String circle = "o";
System.out.println("Please enter number of rows: ");
int rows = in.nextInt();
for (int i = 0; i < rows; i++){
    if ((i % 2) == 0)
    {
        System.out.print(circle);
    }
    else
    {
        system.out.print(star);
    }
 System.out.println();
}

看看是否有效。 谢谢!

答案 3 :(得分:1)

这是一个易于理解且对初学者友好的解决方案。
(如果你想更高级,请查看来自@ Bohemian的解决方案♦)

String star = "*";
String circle = "o";
System.out.println("Please enter number of rows: ");
int rows = in.nextInt();
for (int i = 0; i < rows; i++){
    // How many "o" do we need?
    int count_circle = i;

    // How many * do we need?
    int count_star = count_circle + 1;

    // Let's create the string with o and *
    String output = "";
    for(int j = 0; j < (count_circle + count_star); j++){
        if(j % 2 == 0) // if it is odd
            output = output + star;
        else // if it is even
            output = output + circle;
    }

    // Do we need spaces at the beginning?
    String spaces = "";
    for(int j = 0; j < rows - i - 1; j++){
        spaces = spaces + " ";
    }

    // Final output
    output = spaces + output;
    System.out.println(output);
}

答案 4 :(得分:1)

试试这个。

html,
body {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
#map_canvas {
  width: 80%;
  height: 100%;
  margin: 0px;
  padding: 0px
}

答案 5 :(得分:0)

例如: 如果rows = 3

* ##

**#

***

class Main{
public static void main(String x[]){
    Scanner scan=new Scanner(System.in);
    int rows=scan.nextInt();
    for(int i=1;i<rows;i++){
        for (int j=0;j<i;j++)
        {
        System.out.print("*");
        }
    for (int j=rows;j>i;j--)
        {
        System.out.print("#");
        }
    System.out.println();
    }
}
}

看看是否可行。 谢谢!