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
相关产品推荐
相关产品推荐

