我想用Java创建一个以“*”为基础的力量金字塔。

21 浏览
0 Comments

我想用Java创建一个以“*”为基础的力量金字塔。

输入: base=2, row = 3\n输出:\n

   **
  ****
********

\n输入: base=3, row = 3 \n输出:\n

            ***
         *********
***************************

\n我尝试过这种方式,但空格打印不正确。\n

import java.util.Scanner;
public class loops {
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        System.out.println("请输入底数:");
        int base = s.nextInt();
        System.out.println("请输入行数:");
        int h = s.nextInt(); 
        for (int i = 1; i <= h; i++) {
            int num = (int)Math.pow(base, i);
                for(int n=h-1; n>i-1; n--) {
                        System.out.print(" ");
                  }
                for (int j = 0; j < num; j++) {
                    System.out.print("*");
                }
            System.out.println("");
        }
    }
}

0
0 Comments

问题的原因是代码中多次调用了System.out.print方法和System.out.println方法,这导致了大量的I/O操作和方法调用,降低了代码的可读性。解决方法是将字符串的拼接操作放在一个独立的方法中,并只使用System.out.print方法进行打印输出。

以下是修改后的代码示例:

public static void main(String[] args) {
    int totalWidth  = (int) Math.pow(base, h);
    String output = "";
    for (int i = 1; i <= h; i++) {
        int numOfStars = (int) Math.pow(base, i);
        int numOfSpace = (int) ((totalWidth - numOfStars) / 2);
        output += composeString(' ', numOfSpace).concat(composeString('*', numOfStars ).concat("\n"));
    }
    System.out.println(output);
}
//Method to create String with same character repeated X number of times
public static String composeString(char character, int x) {
    StringBuilder buf = new StringBuilder(x);
    while (buf.length() < x) {
        buf.append(character);
    }
    return buf.toString();
}

此外,如果对性能有要求,可以使用StringBuilder而不是StringBuffer,并使用StringBuilder(int)构造函数而不是""进行初始化,以及使用append方法而不是insert方法。另外,需要注意System.out.print方法在没有包含换行符'\n'时,不会立即刷新流,而是将数据缓冲起来。虽然这种方式不如预先构建字符串再一次性发送效率高,但是避免了每次System.out.print调用都进行IO操作的问题。

0
0 Comments

问题的原因是想要使用Java创建一个“*”的权力金字塔,即根据输入的基数和高度,以“*”字符构建一个金字塔形状。解决方法是通过计算金字塔的总宽度,并根据每个环形的宽度逐步减小空格的数量来编写代码。

为了解决这个问题,需要使用Java编程语言。首先,需要导入Scanner类,以便从用户那里获取输入。然后,定义一个名为loops的公共类,并在其中创建一个名为main的公共静态方法。在main方法中,创建一个Scanner对象来获取用户输入的基数和高度,并将其存储在base和h变量中。

接下来,通过使用Math.pow()函数计算金字塔的总宽度,并将结果存储在width变量中。然后,使用一个for循环来遍历每个环形。在每个环形的循环中,使用Math.pow()函数计算当前环形的宽度,并将结果存储在num变量中。

接下来,使用两个嵌套的for循环来打印金字塔的空格和“*”字符。首先,在第一个内部for循环中,计算当前环形之前的空格数,并使用空格字符打印它们。空格的数量是总宽度减去当前环形的宽度,然后除以2。

然后,在第二个内部for循环中,使用星号字符打印当前环形的“*”字符。循环次数等于当前环形的宽度。

最后,使用System.out.println("")打印一个空行,以将每个环形分开。

通过按照上述步骤编写代码,就可以创建一个“*”的权力金字塔,并根据用户输入的基数和高度进行自定义。

0
0 Comments

问题的原因是需要使用Java创建一个由“*”组成的权力金字塔。为了解决这个问题,可以使用Java编写一个程序,其中包含一个循环来打印出金字塔的每一行。代码中使用了Scanner类来获取用户输入的金字塔的基数和高度。然后,通过嵌套的循环来打印出每一行的空格和星号。最后,关闭Scanner对象来释放资源。

以下是整理后的文章:

使用Java创建一个由“*”组成的权力金字塔

在Java编程中,有时候需要创建一些特殊形状的图案,比如权力金字塔。一个权力金字塔由一系列层级递增的“*”组成,每一层的“*”数量是前一层的两倍。为了实现这个功能,可以使用Java编写一个程序。

首先,我们需要使用Scanner类来获取用户输入的金字塔的基数和高度。通过以下代码可以实现:

Scanner s = new Scanner(System.in);
System.out.println("请输入金字塔的基数:");
int base = s.nextInt();
System.out.println("请输入金字塔的高度:");
int h = s.nextInt();

接下来,我们可以使用循环来打印出金字塔的每一行。在每一行中,我们需要计算出空格和星号的数量,并使用嵌套的循环来打印出相应数量的空格和星号。具体的代码如下:

int spacesNum;
int asterisksNum;
for (int i = 1; i <= h; i++) {
    spacesNum = (int) ((Math.pow(base, h) - Math.pow(base, i)) / 2);
    asterisksNum = (int) (Math.pow(base, i));
    for (int j = 0; j < spacesNum; j++) {
        System.out.print(" ");
    }
    for (int j = 0; j < asterisksNum; j++) {
        System.out.print("*");
    }
    System.out.println();
}

最后,我们需要关闭Scanner对象来释放资源。可以通过以下代码实现:

s.close();

通过以上步骤,我们就可以使用Java编写一个程序来创建一个由“*”组成的权力金字塔。

本文介绍了如何使用Java编写一个程序来创建一个由“*”组成的权力金字塔。通过使用Scanner类获取用户输入的基数和高度,然后使用循环和数学运算来计算出每一行的空格和星号的数量,最后打印出金字塔的每一行。通过这个程序,我们可以方便地创建出不同基数和高度的权力金字塔。

0