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

如何为Triangle类中来自xOy类的对象属性输入值?

解决方案

先梳理现有代码存在的问题:

  • Triangle类继承xOy无实际意义,Triangle是三个坐标点的容器,不需要自身拥有x、y属性
  • xOy的input方法每次创建Scanner实例,会造成资源浪费,且无明确输入提示,用户不清楚输入对应哪个点
  • Triangle中的point1、point2、point3未初始化,直接调用input会触发空指针异常

优化后的XOy类

import java.util.Scanner;

// 遵循Java大驼峰命名规范,将类名改为XOy
public class XOy {
    float x;
    float y;
    // 复用同一个Scanner实例,避免重复创建
    private static final Scanner sc = new Scanner(System.in);

    // 新增参数明确输入的点名称,提升用户体验
    public void input(String pointName) {
        System.out.printf("请输入%s的x、y坐标(用空格分隔):%n", pointName);
        this.x = sc.nextFloat();
        this.y = sc.nextFloat();
    }
}

修改后的Triangle类

public class Triangle {
    XOy point1;
    XOy point2;
    XOy point3;

    // 构造方法中初始化三个坐标点对象,避免空指针
    public Triangle() {
        this.point1 = new XOy();
        this.point2 = new XOy();
        this.point3 = new XOy();
    }

    // 批量输入三个点的坐标
    public void inputAllPoints() {
        point1.input("point1");
        point2.input("point2");
        point3.input("point3");
    }

    // 可选:添加打印方法验证输入结果
    public void printPoints() {
        System.out.printf("point1: (%.1f, %.1f)%n", point1.x, point1.y);
        System.out.printf("point2: (%.1f, %.1f)%n", point2.x, point2.y);
        System.out.printf("point3: (%.1f, %.1f)%n", point3.x, point3.y);
    }
}

测试代码

public class Main {
    public static void main(String[] args) {
        Triangle triangle = new Triangle();
        triangle.inputAllPoints();
        triangle.printPoints();
    }
}

关键修改说明

  1. 命名规范修正:类名改为XOy,符合Java命名规则
  2. Scanner复用:将Scanner设为静态常量,减少资源消耗
  3. 明确输入提示:input方法添加点名称参数,让用户清晰知晓当前输入目标
  4. 初始化坐标点:在Triangle构造方法中完成三个点的初始化,避免空指针异常
  5. 移除冗余继承:Triangle不再继承XOy,回归容器类的本质

运行测试代码后,用户即可依次输入三个点的x、y值,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:47:35