Java Path类作业函数实现求助:Scanner与点操作等问题
Path类方法修正与实现指南
先明确你现有代码中的核心问题,再给出完整的修正与实现方案:
问题分析
- getX/getY逻辑错误:当前直接返回参数
n,完全没有从存储的Point对象中读取坐标,完全不符合方法设计意图。 - 成员变量冗余:定义两个
ArrayList<Point>会导致点数量统计、坐标获取的逻辑混乱,从方法功能来看,只需要一个列表存储路径上的所有点即可。 - 核心功能未实现:
add方法没有完成添加点的逻辑,带Scanner的构造函数也未实现从输入构建路径的代码。
修正后的完整代码
import java.awt.Point; import java.util.ArrayList; import java.util.Scanner; public class Path { // 用单个列表存储路径上的所有点 private ArrayList<Point> points; // 无参构造:初始化空路径 public Path() { points = new ArrayList<>(); } // 带Scanner的构造:从输入读取点构建路径 // 假设输入格式:先输入点的总数,再依次输入每个点的x、y坐标 public Path(Scanner s) { points = new ArrayList<>(); int pointCount = s.nextInt(); for (int i = 0; i < pointCount; i++) { int x = s.nextInt(); int y = s.nextInt(); add(x, y); } } // 返回路径上的点总数 public int getPointCount() { return points.size(); } // 获取第n个点的x坐标(索引从0开始) public int getX(int n) { if (n < 0 || n >= points.size()) { throw new IndexOutOfBoundsException("点索引超出范围"); } return points.get(n).x; } // 获取第n个点的y坐标(索引从0开始) public int getY(int n) { if (n < 0 || n >= points.size()) { throw new IndexOutOfBoundsException("点索引超出范围"); } return points.get(n).y; } // 向路径添加新点 public void add(int x, int y) { points.add(new Point(x, y)); } // 返回路径的字符串表示,格式如:[(x1,y1), (x2,y2), ...] public String toString() { if (points.isEmpty()) { return "[]"; } StringBuilder sb = new StringBuilder("["); for (int i = 0; i < points.size(); i++) { Point p = points.get(i); sb.append(String.format("(%d,%d)", p.x, p.y)); if (i != points.size() - 1) { sb.append(", "); } } sb.append("]"); return sb.toString(); } }
关键实现说明
- add方法:通过
new Point(x, y)创建点对象,再调用ArrayList.add()将其加入列表,这就是向ArrayList添加Point的标准方式。 - Scanner构造函数:按“先点数、后逐个坐标”的格式读取输入,循环调用add方法完成路径构建,你可以根据作业要求调整输入格式(比如每行输入一个点的坐标)。
- getX/getY:先检查索引合法性避免越界,再通过
points.get(n)获取对应Point对象,直接访问其x/y属性即可得到坐标。 - toString方法:用StringBuilder拼接所有点的坐标,生成可读性强的路径字符串。
内容的提问来源于stack exchange,提问作者nefiaragon
相关产品推荐
相关产品推荐

