1、需求分析
本文将讲述如何使用Java语言写出打印给定整数的方形图案的程序。具体要求是用户输入一个整数num,程序将会打印num行num列的图案,其中第一行和最后一行,第一列和最后一列都是“*”,其余位置是“+”。
2、代码实现
2.1 主函数
主函数主要是负责获取用户输入的num,并且调用打印图案的方法printPattern:
import java.util.Scanner;
public class PrintPattern {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Please input a number: ");
int num = sc.nextInt();
printPattern(num);
}
}
2.2 打印图案方法
打印图案方法printPattern根据用户输入的num,逐行逐列打印图案,并将第一行和最后一行,第一列和最后一列的位置设置为“*”:
public static void printPattern(int num) {
for (int i = 1; i <= num; i++) {
for (int j = 1; j <= num; j++) {
if (i == 1 || i == num || j == 1 || j == num) {
System.out.print("*");
} else {
System.out.print("+");
}
}
System.out.println();
}
}
3、运行结果
下面是一个输入为5的运行结果:
Please input a number: 5
*****
*+++*
*+++*
*+++*
*****
4、代码优化
以上代码虽然可以正确地实现需求,但是可以通过优化代码结构和算法来提升程序性能和效率。
4.1 变量命名
变量命名应该使用有意义的英文单词,并符合命名规范:
num → rowCount
i → row
j → column
4.2 引入变量
将第一行和最后一行的位置用变量保存,在循环中直接判断row是否等于topRow或者bottomRow,取代原来的i == 1 和 i == num 的判断:
public static void printPattern(int rowCount) {
int topRow = 1;
int bottomRow = rowCount;
for (int row = 1; row <= rowCount; row++) {
for (int column = 1; column <= rowCount; column++) {
boolean isEdge = row == topRow || row == bottomRow || column == topRow || column == bottomRow;
System.out.print(isEdge ? "*" : "+");
}
System.out.println();
}
}
4.3 空间换时间
遍历的时候,除了边缘处要打印“*”,其他位置都要打印“+”,可以通过逻辑推导出:如果“*”的位置是(row, column),且row、column均为偶数,则不需要打印“*”。
public static void printPattern(int rowCount) {
int topRow = 1;
int bottomRow = rowCount;
for (int row = 1; row <= rowCount; row++) {
for (int column = 1; column <= rowCount; column++) {
boolean isEvenRow = row % 2 == 0;
boolean isEvenColumn = column % 2 == 0;
boolean isEdge = row == topRow || row == bottomRow || column == topRow || column == bottomRow;
System.out.print(isEdge || (isEvenRow && isEvenColumn) ? "*" : "+");
}
System.out.println();
}
}
5、总结
本文讲述了如何使用Java语言编写打印方形图案的程序。通过本文的讲解,可以学到Java中Scanner的使用、方法的调用和参数传递、循环控制语句的使用等内容。同时,通过代码的优化,也能学到如何合理利用计算机资源,提高程序性能和效率。