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

ccb*_*ger 4 java

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

      *
     *o*
    *o*o*
   *o*o*o*
  *o*o*o*o*
 *o*o*o*o*o*
Run Code Online (Sandbox Code Playgroud)

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

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();
}
Run Code Online (Sandbox Code Playgroud)

但是,我的代码输出与上面的金字塔不匹配.用户输入"6"的代码输出为:

******o
*****oo
****ooo
***oooo
**ooooo
*oooooo
Run Code Online (Sandbox Code Playgroud)

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

Boh*_*ian 5

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

在伪代码中:

  • 创建一个n空格字符串
  • 添加"*"到它
  • 循环n时间,循环的每次迭代:
    • 打印出来
    • 替换" *""*O*"

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

通常,解决难题的最佳方法是以使其成为简单问题(或简单问题的集合)的方式来查看它.


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

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

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

str = str.replace(" *", "*O*");
Run Code Online (Sandbox Code Playgroud)