Java无数组实现笛卡尔网格星号矩形绘制方案咨询
实现思路
因为要求不使用数组,所以采用逐行逐列按需渲染的逻辑,从Y轴顶部(Y=20)到X轴底部(Y=0)逐行打印,每一个坐标点优先判断是否属于矩形绘制区域,是则输出*,否则输出网格本身的对应元素,完全不会破坏原有网格结构。
方法拆分完全遵循高内聚原则,每个方法只负责单一逻辑:
- 坐标判断方法:
isInRectangle,专门处理“当前打印点是否落在矩形范围内”的逻辑,和绘制逻辑完全解耦 - Y轴行打印方法:
printYAxisRow,专门处理Y轴方向每一行的刻度、竖线、内容渲染 - X轴底栏打印方法:
printXAxisFooter,专门处理底部X轴的刻度、横线、箭头渲染 - 主调度方法:
drawGridWithRectangle,负责遍历Y轴刻度、调度上述方法完成整体绘制
代码示例
import java.util.Scanner; public class GridRectangleDrawer { // 网格固定参数 private static final int MAX_Y = 20; private static final int MAX_X = 40; // 判断当前坐标点是否在矩形范围内 private static boolean isInRectangle(int currentX, int currentY, int rectLeftX, int rectTopY, int rectWidth, int rectHeight) { return currentX >= rectLeftX && currentX < rectLeftX + rectWidth && currentY <= rectTopY && currentY > rectTopY - rectHeight; } // 打印Y轴方向的单行内容 private static void printYAxisRow(int currentY, int rectLeftX, int rectTopY, int rectWidth, int rectHeight) { // 打印左侧Y轴刻度 if (currentY % 5 == 0) { System.out.printf("%2d +", currentY); } else { System.out.print(" |"); } // 打印X方向每一列的内容 for (int x = 0; x <= MAX_X; x++) { if (isInRectangle(x, currentY, rectLeftX, rectTopY, rectWidth, rectHeight)) { System.out.print("*"); } else { System.out.print(" "); } } System.out.println(); } // 打印底部X轴栏 private static void printXAxisFooter() { // 打印X轴上半部分横线 System.out.print(" 0 +"); for (int x = 1; x <= MAX_X; x++) { System.out.print(x % 5 == 0 ? "+" : "="); } System.out.println(" >X"); // 打印X轴刻度 System.out.print(" "); for (int x = 0; x <= MAX_X; x+=5) { System.out.printf("%-5d", x); } System.out.println(); } // 整体绘制入口 public static void drawGridWithRectangle(int rectLeftX, int rectTopY, int rectWidth, int rectHeight) { // 先打印Y轴标题 System.out.println(" Y"); System.out.println(" ^"); // 从Y轴顶部往底部逐行打印 for (int y = MAX_Y; y > 0; y--) { printYAxisRow(y, rectLeftX, rectTopY, rectWidth, rectHeight); } // 打印底部X轴 printXAxisFooter(); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 接收用户输入 System.out.print("请输入矩形左上角X坐标:"); int x = scanner.nextInt(); System.out.print("请输入矩形左上角Y坐标:"); int y = scanner.nextInt(); System.out.print("请输入矩形宽度:"); int width = scanner.nextInt(); System.out.print("请输入矩形高度:"); int height = scanner.nextInt(); scanner.close(); // 参数合法性校验 if (x < 0 || x + width > MAX_X || y - height < 0 || y > MAX_Y) { System.out.println("输入参数超出网格范围,请重新输入"); return; } drawGridWithRectangle(x, y, width, height); } }
验证说明
输入示例参数x=16, y=14, 宽度=4, 高度=5即可完全复现你给出的绘制效果,所有逻辑只用了JDK原生API,没有用到任何数组、第三方库。
内容的提问来源于stack exchange,提问作者Arenevian
相关产品推荐
相关产品推荐

