簡體   English   中英

Java中變量之間的對象切換

[英]Objects switching between variables in Java

我正在用Java進行一些培訓,但我堅持如何解決這個問題。 如何訪問不同的變量? 例如,我想訪問c1x但它給我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)) );
    }
}

您沒有創建任何Circle實例,並且所有變量都是靜態變量,因此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。 您需要刪除靜態定義並添加實例方法以計算到其他Circle的距離。 這種添加更面向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));

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM