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

如何调试Java自定义D3Point类的坐标覆盖逻辑错误?

Java程序坐标覆盖问题排查方案与修复

可选排查步骤

  • 第一步:核查成员变量与实例方法的修饰符。优先检查是否错误使用了static关键字修饰需要每个实例独立存储的成员变量,以及操作实例变量的普通方法。
  • 第二步:新增调试日志验证变量共享性。在acceptPoint和displayPoint方法中插入打印逻辑,输出当前对象的hashCode()和x/y/z的当前值,可直接观测到两个实例操作的是同一份变量,所以后赋值的内容会覆盖之前的内容。
  • 第三步:验证语法规则匹配度。对照Java中static关键字的定义:static修饰的成员属于类层级,所有类实例共享同一份存储空间,每次修改对所有实例生效;只有未加static的实例成员,才会在每个对象创建时单独分配存储空间,互不干扰。

根因说明

你代码中所有的x/y/z成员变量、acceptPoint、displayPoint方法都错误添加了static修饰符,导致所有D3Point实例共享一套坐标值,第二次输入的坐标会直接覆盖第一次录入的内容,最终打印两个点的坐标完全一致。

修复后代码

import java.util.*;
class D3Point {
    // 移除static修饰,改为实例成员变量,每个对象单独持有一份
    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+")");
    }
    // 补充主方法必备参数String[] args,符合Java入口规范
    public static void main(String[] args)
    {
        D3Point Point1= new D3Point();
        D3Point Point2= new D3Point();
        Point1.acceptPoint();
        Point2.acceptPoint();
        System.out.println("THE COORDINATES OF THE TWO POINTS ARE:");
        Point1.displayPoint();
        Point2.displayPoint();
    } 
}

内容的提问来源于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 15:36:02