You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于流程图的Java编程:代码正确性与健壮性优化咨询

关于你的Java代码思路与优化建议

嘿,作为编程新手能跟着流程图写出代码已经超棒啦!先帮你捋捋思路对不对,再聊聊怎么优化得更健壮~

首先贴出你的代码和输出方便参考:
你的代码:

// r is row, c is column
int r = 1, c = 1;
do {
    if (r <= 4) {
        if (c <= 10) {
            System.out.print("*");
            c += 1;
        } else {
            r += 1;
            c = 1;
            System.out.println();
        }
    } else {
        System.exit(1);
    }
}while (c != 12);

输出结果:

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

思路分析

你的核心思路是没问题的——通过行(r)和列(c)的计数器配合,控制每行输出10个星号后换行,总共输出4行,最终也得到了正确的结果。不过有几个逻辑细节可以再打磨下:

  • 循环条件while (c != 12)其实是个“巧合式”的条件:当第4行输出完10个星号后,c变成11,进入else分支,r变成5,c重置为1并换行。这时候循环继续执行,因为c=1≠12,进入外层else执行System.exit(1)退出程序。这个条件和我们“输出4行10列星号”的业务目标没有直接关联,可读性不强,容易让人困惑。
  • System.exit(1)用在这里完全没必要,它是强制终止JVM的操作,正常完成输出后让循环自然结束就好,强制退出反而可能在后续扩展代码时埋下隐患(比如后面还有其他逻辑要执行的话就被打断了)。

优化建议

给你几个方向让代码更健壮、可读性更强:

  • 改用嵌套循环,贴合业务逻辑:既然我们明确要输出「4行,每行10个星号」,直接用外层循环控制行数、内层循环控制每行的星号数,逻辑会清晰很多,别人一看就懂:
// 外层循环控制行数,共4行
for (int row = 1; row <= 4; row++) {
    // 内层循环控制每行的星号数量,共10个
    for (int col = 1; col <= 10; col++) {
        System.out.print("*");
    }
    // 每行结束后换行
    System.out.println();
}
  • 去掉不必要的强制退出:把System.exit(1)删掉就好,当循环完成所有输出后,程序会自然结束,完全不需要强制终止JVM。
  • 用常量提升可维护性:如果以后需要修改输出的行数或每行的星号数,把这些数值定义成常量,只改一处就能生效,不用在代码里到处找:
public class StarPrinter {
    // 定义常量,方便后续修改
    private static final int TOTAL_ROWS = 4;
    private static final int STARS_PER_ROW = 10;

    public static void main(String[] args) {
        for (int row = 0; row < TOTAL_ROWS; row++) {
            for (int col = 0; col < STARS_PER_ROW; col++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
  • 增加参数校验(扩展场景):如果以后要支持动态输入行数和列数,可以加入参数校验,避免传入负数、0等无效值导致异常输出:
public static void printStars(int rows, int cols) {
    // 校验参数是否合法
    if (rows <= 0 || cols <= 0) {
        System.err.println("行数和列数必须是正整数哦!");
        return;
    }
    // 执行输出逻辑
    for (int row = 0; row < rows; row++) {
        for (int col = 0; col < cols; col++) {
            System.out.print("*");
        }
        System.out.println();
    }
}

内容的提问来源于stack exchange,提问作者1g0tquestions

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 20:22:58