Java中在变量之间切换的对象
我正在用Java进行一些培训,我被困在如何解决这个问题上。如何访问不同的变量?例如,我想访问Java中在变量之间切换的对象,java,object,geometry,Java,Object,Geometry,我正在用Java进行一些培训,我被困在如何解决这个问题上。如何访问不同的变量?例如,我想访问c1的x,但它给了我0,这是默认的x 代码如下: class Circle { static double x; // x-coordinate of centre static double y; // y-coordinate of centre static double r; // radius static Circle c1;{ c1.x =
c1
的x
,但它给了我0
,这是默认的x
代码如下:
class Circle {
static double x; // x-coordinate of centre
static double y; // y-coordinate of centre
static double r; // radius
static Circle c1;{
c1.x = 1;
c1.y= 2;
c1.r= 4;
double distance = Math.sqrt((x-0)*(x-0) + (y-0)*(y-0));
System.out.println(distance + " " + Math.sqrt((x-0)*(x-0) + (y-0)*(y-0)) );
}
static Circle c2;{
c2.x = -2;
c2.y=0;
c2.r=2;
}
public static void main(String[] args){
double distance = Math.sqrt((c1.x-0)*(c1.x-0) + (c1.y-0)*(c1.y-0));
System.out.println(distance + " " + Math.sqrt((x-0)*(x-0) + (y-0)*(y-0)) );
}
}
您没有创建圆的任何实例,并且所有变量都是静态的,因此
x==c1.x==c2.x
(它们都指向完全相同的变量)
我将去掉静态变量并正确初始化实例:
public class Circle
{
double x; // x-coordinate of centre
double y; // y-coordinate of centre
double r; // radius
public static void main(String[] args)
{
Circle c1 = new Circle();
c1.x = 1;
c1.y= 2;
c1.r= 4;
Circle c2 = new Circle ();
c2.x = -2;
c2.y=0;
c2.r=2;
System.out.println("distance " + Math.sqrt((c2.x-c1.x)*(c2.x-c1.x) + (c2.y-c1.y)*(c2.y-c1.y)) );
}
}
你应该学习OOP。您需要删除静态定义并添加实例方法来计算到其他圆的距离。这种添加更加面向对象 这里是修改后的代码:
public class Circle {
private double x;
private double y;
private double r;
public Circle(double x, double y, double r) {
this.x = x;
this.y = y;
this.r = r;
}
public double distanceTo(Circle other) {
double deltaX = other.x - this.x;
double deltaY = other.y - this.y;
return Math.sqrt(deltaX * deltaX + deltaY * deltaY);
}
public double getX() {
return x;
}
public double getY() {
return y;
}
public double getR() {
return r;
}
public static void main(String[] args) {
Circle c1 = new Circle(10, 10, 10);
Circle c2 = new Circle(100, 100, 10);
System.out.println(c1.distanceTo(c2));
}
}
“类圆{静态双x;//中心静态双y的x坐标;//中心静态双r的y坐标;//半径”不会转换为代码这不会引发空引用异常?这里使用Static有什么原因吗?您正在设置静态类变量的值。它不会引发空引用异常,我使用了静态值,因为没有它它它根本无法访问x。它怎么会改为使用0而不是c1.x或c2.x