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

Java实现3D点距离及中点计算时第二个对象输入覆盖第一个的问题

问题根源

你的代码错误使用了static修饰符:

  • 被static修饰的成员变量x,y,z属于整个D3Point类,所有类的实例会共享同一份值,所以你给第二个对象赋值时,会直接覆盖第一个对象存储的坐标
  • 被static修饰的acceptPoint()、displayPoint()方法操作的是类层面的共享变量,无法区分不同实例的独立属性
修复后代码
import java.util.*; 
class D3Point 
{
    // 移除static修饰,每个对象拥有独立的x、y、z
    double x,y,z;
    D3Point()
    {
        x=0.0;
        y=0.0;
        z=0.0;
    }
    // 移除static修饰,操作当前对象的属性
    void acceptPoint()
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("ENTER THE X-COORDINATE OF THE POINT");
        x=sc.nextDouble();
        System.out.println("ENTER THE Y-COORDINATE OF THE POINT");
        y=sc.nextDouble();
        System.out.println("ENTER THE Z-COORDINATE OF THE POINT");
        z=sc.nextDouble();
    }
    // 移除static修饰,显示当前对象的属性
    void displayPoint()
    {
        System.out.println("("+x+","+y+","+z+")");
    }
    static double distance(D3Point P1, D3Point P2)
    {
        double a,b,c;
        double s,d;
        a=P2.x-P1.x;
        b=P2.y-P1.y;
        c=P2.z-P1.z;
        s=Math.pow(a,2)+Math.pow(b,2)+Math.pow(c,2);
        d=Math.sqrt(s);
        return d;
    }
    static D3Point midpoint(D3Point P1, D3Point P2)
    {
        D3Point P3= new D3Point();
        P3.x=(P1.x+P2.x)/2;
        P3.y=(P1.y+P2.y)/2;
        P3.z=(P1.z+P2.z)/2;
        return P3;
    }
    // 保留你要求的无参数main写法,没有使用String[] args
    public static void main()
    {
        double d;
        D3Point Point1= new D3Point();
        D3Point Point2= new D3Point();
        D3Point Point3= new D3Point();
        Point1.acceptPoint();
        Point2.acceptPoint();
        System.out.println("THE COORDINATES OF THE TWO POINTS ARE:");
        Point1.displayPoint();
        Point2.displayPoint();
        d=distance(Point1, Point2);
        System.out.println("THE DISTANCE BETWEEN THE TWO POINTS IS ="+d);
        Point3=midpoint(Point1, Point2);
        System.out.println("THE MIDPOINT OF THE TWO GIVEN POINT IS");
        Point3.displayPoint();
    } 
}
改动说明
  • 仅移除了成员变量和实例方法上多余的static修饰符,没有改动原有业务逻辑
  • 保留了无参数的main方法,没有使用你未学习的String[] args相关写法
  • 修复后每个D3Point对象会独立存储自己的坐标,不会互相覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:15:03