如何为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(); } }
关键修改说明
- 命名规范修正:类名改为
XOy,符合Java命名规则 - Scanner复用:将Scanner设为静态常量,减少资源消耗
- 明确输入提示:input方法添加点名称参数,让用户清晰知晓当前输入目标
- 初始化坐标点:在Triangle构造方法中完成三个点的初始化,避免空指针异常
- 移除冗余继承:Triangle不再继承XOy,回归容器类的本质
运行测试代码后,用户即可依次输入三个点的x、y值,完全匹配需求。
内容的提问来源于stack exchange,提问作者danghoang
相关产品推荐
相关产品推荐

