基于流程图的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
相关产品推荐
相关产品推荐

