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

在ArrayList中添加独立值实现点坐标存储的技术咨询

关于ArrayList存储点坐标的代码合理性与优化方案

嘿,咱们来聊聊你这段存储点坐标的代码哈~首先得说,现有代码确实存在一些问题,咱们一步步分析,再给你更合理的实现方案。

现有代码的不合理之处

  • 核心逻辑偏离目标:你定义了L3这个二维ArrayList,但全程没往里面加任何元素;而且每次循环给L1添加两次相同的b,最后得到的是一个扁平的列表,比如当land_no=3时,L1会是[b1,b1,b2,b2,b3,b3],完全没法区分哪个元素属于哪个点,根本达不到“存储独立点坐标”的目的。
  • 变量命名不清晰:L1、L3这种命名太模糊,别人看代码根本猜不到它们的用途,可读性极差。
  • 不必要的类型转换:Math.round()返回的是long类型,你把它赋值给double类型的变量,属于不必要的内存浪费,毕竟取整后已经是整数了。

更优的实现方案

根据你的需求(存储点坐标),我给你推荐两种常用的实现方式,按推荐程度排序:

方案1:自定义Point类(最推荐)

直接定义一个语义明确的Point类来封装坐标,这是Java里处理这类问题最规范的方式:

// 先定义Point类,封装x、y坐标
class Point {
    private final int x;
    private final int y;

    // 构造方法
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    // 按需添加getter方法,方便获取坐标
    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    // 重写toString方法,方便调试时查看点的信息
    @Override
    public String toString() {
        return "Point{" + "x=" + x + ", y=" + y + '}';
    }
}

// 修改后的landmarks方法
public void landmarks(int land_no) {
    // 用List存储Point对象,语义清晰
    List<Point> pointList = new ArrayList<>();
    for (int i = 0; i < land_no; i++) {
        // 生成x坐标(取整后的随机数)
        int x = (int) Math.round(Math.random() * 100);
        // 如果需要x和y相同,就直接用同一个值;如果需要不同,单独生成y即可
        int y = x;
        // int y = (int) Math.round(Math.random() * 100);
        pointList.add(new Point(x, y));
    }
}

这种方式的优势:

  • 语义清晰:一看就知道pointList里存储的是一个个点坐标,代码可读性拉满。
  • 类型安全:不会出现坐标混乱的情况,避免把x和y搞混。
  • 扩展性强:以后如果需要给点添加功能(比如计算两点距离、判断是否在某个区域内),直接在Point类里加方法就行。

方案2:使用嵌套List(无需自定义类)

如果不想额外定义类,也可以用嵌套的List来存储每个点的坐标,每个子List对应一个点的x和y:

public void landmarks(int land_no) {
    // 外层List存储所有点,内层List存储单个点的x、y
    List<List<Integer>> pointList = new ArrayList<>();
    for (int i = 0; i < land_no; i++) {
        int coord = (int) Math.round(Math.random() * 100);
        List<Integer> singlePoint = new ArrayList<>();
        singlePoint.add(coord);
        singlePoint.add(coord); // x和y相同的情况
        // 如果需要x和y不同,分别生成:
        // int x = (int) Math.round(Math.random() * 100);
        // int y = (int) Math.round(Math.random() * 100);
        // singlePoint.add(x);
        // singlePoint.add(y);
        pointList.add(singlePoint);
    }
}

这种方式比你原来的扁平List合理,因为每个子List对应一个独立的点,但缺点是没有自定义类直观,需要记住子List的第一个元素是x,第二个是y,容易出错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:37:43