直接打印星号
在Java中,最基础的输出星号(*)方式是通过System.out类的打印方法实现的,Java提供了三个核心输出方法:print()、println()和printf(),它们在输出星号时略有差异。

-
*`System.out.print(““)`**:该方法会直接输出星号,且不换行,如果连续调用多次,星号会紧挨着显示在同一行。
System.out.print("*"); System.out.print("*"); System.out.print("*");输出结果为:(三个星号在同一行,无空格或换行)。
-
*`System.out.println(““)`**:该方法输出星号后会自动换行,每次调用都会在新的一行开始显示星号。
System.out.println("*"); System.out.println("*"); System.out.println("*");输出结果为:
(三个星号分别占据三行)。
-
*`System.out.printf(““)
**:该方法主要用于格式化输出,虽然直接传星号字符串时与print()`效果相同,但更常用于结合格式化控制符。System.out.printf("*%n*%n*");%n是printf()中的换行符,效果与println()类似,输出结果同样是三个星号分三行。
循环控制:批量输出与图形构建
当需要输出多个星号或构建特定图形(如三角形、矩形)时,循环结构是核心工具,Java中的for循环、while循环和do-while循环均可实现,其中for循环因语法简洁、适合固定次数迭代,成为最常用的选择。
固定数量星号输出
若要输出固定数量的星号(如10个),可通过for循环控制迭代次数:
for (int i = 0; i < 10; i++) {
System.out.print("*");
}
输出结果为:(10个星号在同一行)。
图形构建:星号排列
通过嵌套循环,可实现复杂星号图形,输出一个由星号组成的直角三角形(4行):
for (int i = 1; i <= 4; i++) { // 控制行数
for (int j = 1; j <= i; j++) { // 控制每行星号数量
System.out.print("*");
}
System.out.println(); // 每行结束后换行
}
输出结果为:

类似地,调整嵌套循环的逻辑可构建其他图形,等腰三角形需在每行星号前添加空格:
int rows = 4;
for (int i = 1; i <= rows; i++) {
// 输出空格:每行星号前空格数=总行数-当前行数
for (int j = 1; j <= rows - i; j++) {
System.out.print(" ");
}
// 输出星号:每行星号数=2*当前行数-1
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print("*");
}
System.out.println();
}
输出结果为:
格式化输出:整齐排列与样式控制
当需要控制星号的对齐方式、间距或与其他文本混合输出时,System.out.printf()的格式化功能尤为实用,通过格式化控制符(如%-5s表示左对齐、宽度为5的字符串),可实现整齐的排版。
固定宽度输出
输出5个星号,每个星号占5个字符宽度(右对齐):
System.out.printf("%5s%n", "*");
System.out.printf("%5s%n", "*");
System.out.printf("%5s%n", "*");
输出结果为:
星号均靠右对齐,前面有4个空格,若改为左对齐(%-5s):
System.out.printf("%-5s%n", "*");
System.out.printf("%-5s%n", "*");
System.out.printf("%-5s%n", "*");
输出结果为:
星号靠左,后面有4个空格。
混合文本与星号
格式化输出还可将星号与文本结合,例如生成带标题的星号分隔线:
String title = "Java星号输出";
System.out.printf("*%s*%n", title);
输出结果为:
*Java星号输出*
若需分隔线两侧对称,可通过计算动态填充星号:
int padding = 5;
String line = "";
for (int i = 0; i < padding; i++) {
line += "*";
}
System.out.println(line + " " + title + " " + line);
假设padding=5,输出结果为:

***** Java星号输出 *****
进阶技巧:异常处理与文件输出
输出时的异常处理
虽然控制台输出星号极少出现异常,但若涉及文件输出(如将星号写入文件),需处理可能的IOException,使用PrintWriter写入文件:
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class StarOutput {
public static void main(String[] args) {
try (PrintWriter writer = new PrintWriter(new FileWriter("stars.txt"))) {
writer.println("*");
writer.println("**");
writer.println("***");
} catch (IOException e) {
System.err.println("文件写入失败: " + e.getMessage());
}
}
}
上述代码将星号写入stars.txt文件,并通过try-with-resources自动关闭资源,避免资源泄漏,若文件无法创建(如无权限),会捕获IOException并打印错误信息。
性能优化:批量输出
当需要输出大量星号(如百万级)时,频繁调用System.out.print()会导致性能下降(因每次调用均涉及I/O操作),此时可使用StringBuilder拼接字符串,最后一次性输出:
int count = 1_000_000;
StringBuilder sb = new StringBuilder(count);
for (int i = 0; i < count; i++) {
sb.append("*");
}
System.out.print(sb.toString());
通过减少I/O次数,显著提升输出效率。
实战案例:常见星号图形的实现
结合上述技巧,以下是几个常见星号图形的实现代码及解析:
空心菱形
int size = 4; // 菱形半高
// 上半部分(含中间行)
for (int i = 1; i <= size; i++) {
for (int j = 1; j <= size - i; j++) System.out.print(" ");
for (int k = 1; k <= 2 * i - 1; k++) {
// 首尾或中间行输出星号,否则输出空格
if (k == 1 || k == 2 * i - 1 || i == size) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println();
}
// 下半部分
for (int i = size - 1; i >= 1; i--) {
for (int j = 1; j <= size - i; j++) System.out.print(" ");
for (int k = 1; k <= 2 * i - 1; k++) {
if (k == 1 || k == 2 * i - 1) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println();
}
输出结果为:
数字与星号混合图形
输出1-5的数字,每个数字对应数量的星号:
for (int i = 1; i <= 5; i++) {
System.out.printf("%d: ", i);
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
输出结果为:
1: *
2: **
3: ***
4: ****
5: *****
通过基础输出方法、循环控制、格式化输出及异常处理等技巧,Java可灵活实现星号的简单打印到复杂图形构建,满足不同场景下的需求,掌握这些方法,不仅能提升代码效率,还能为界面美化、数据可视化等场景提供基础支持。
















