创建多个新对象:Java中二维数组存直线信息的实现疑问
优先创建独立的直线类,这是更合理的实现方式
作为常年写Java的开发者,我肯定推荐你放弃二维数组,转而创建一个独立的Line(直线)类来存储每条直线的信息。两者的差距在代码可读性、可维护性和扩展性上非常明显,下面具体说说:
为什么独立类更好?
- 可读性拉满:用数组的话,你得时刻记住
planes[i][0]是起点X,planes[i][3]是终点Y,哪天自己忘或者别人接手代码,得翻半天注释才搞懂每个索引对应什么。而Line类里的startX、endY、slope这些命名清晰的字段,一眼就能明白含义,完全不需要额外解释。 - 类型安全有保障:你现在用的是
int[][],但斜率、y轴截距明显是小数(double类型),用数组存的话要么强制转成int丢失精度,要么改成Object[][]然后频繁强转,很容易出ClassCastException。而Line类可以给每个属性指定正确的类型——起点坐标用int,斜率用double,完美适配需求。 - 封装性让代码更模块化:你以后肯定会需要和直线相关的操作,比如计算直线长度、判断两条直线是否平行、求交点。这些方法直接放在
Line类里就好,比如line1.calculateLength()、line1.isParallel(line2),逻辑和数据绑定在一起,符合面向对象的设计思想。要是用数组的话,这些方法只能写成零散的工具函数,代码会越来越乱。 - 扩展性极强:哪天你想给直线加个属性,比如颜色、唯一ID、是否是虚线,直接在
Line类里加个字段就行,完全不影响现有代码。但如果用二维数组,你得把数组改成6列,然后所有用到数组索引的地方都要改,稍不留神就会出bug。
二维数组什么时候能用?
只有一种极端情况:你的需求超级简单,只是临时存几个固定的整数参数,而且100%确定以后不会加功能、不会改逻辑,代码也只有你自己看。这种情况下数组可能省几行代码,但现实中几乎不存在这样的场景——程序大概率会迭代,到时候你会后悔当初没写类。
给你写个Line类的示例
public class Line { // 直线的核心属性 private int startX; private int startY; private int endX; private int endY; private double slope; private double yIntercept; // 构造方法,初始化时自动计算斜率和截距 public Line(int startX, int startY, int endX, int endY) { this.startX = startX; this.startY = startY; this.endX = endX; this.endY = endY; this.slope = calculateSlope(); this.yIntercept = calculateYIntercept(); } // 封装计算斜率的逻辑 private double calculateSlope() { if (endX == startX) { throw new IllegalArgumentException("垂直直线无法计算斜率"); } return (double)(endY - startY) / (endX - startX); } // 封装计算y轴截距的逻辑 private double calculateYIntercept() { return startY - slope * startX; } // 对外提供必要的访问方法 public int getStartX() { return startX; } // 示例:判断当前直线是否与另一条直线平行 public boolean isParallel(Line otherLine) { return Math.abs(this.slope - otherLine.slope) < 0.0001; // 浮点数比较用精度判断 } }
之后你要存储多条直线,直接用List<Line>就好:
List<Line> lines = new ArrayList<>(); lines.add(new Line(0,0,5,5)); lines.add(new Line(1,2,3,4));
这样的代码不管是现在维护还是以后扩展,都比二维数组舒服太多。
内容的提问来源于stack exchange,提问作者Sully
相关产品推荐
相关产品推荐

