我正在尝试创建一个交替的三角形金字塔" *"和" 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
在这个网站和其他网站上花了最后三个小时后,我仍然在如何交替角色,如何在每一行中拥有正确数量的字符,以及如何将金字塔格式化为预期输出是。我不知道我的代码是完全错误的,或者我是否只是错过了一部分以使其正常工作,但是非常感谢任何建议或参考。
答案 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();
}
}
}
看看是否可行。 谢谢!