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

Java Path类作业函数实现求助:Scanner与点操作等问题

Path类方法修正与实现指南

先明确你现有代码中的核心问题,再给出完整的修正与实现方案:

问题分析

  1. getX/getY逻辑错误:当前直接返回参数n,完全没有从存储的Point对象中读取坐标,完全不符合方法设计意图。
  2. 成员变量冗余:定义两个ArrayList<Point>会导致点数量统计、坐标获取的逻辑混乱,从方法功能来看,只需要一个列表存储路径上的所有点即可。
  3. 核心功能未实现: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:50:37