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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:24:02