2015-04-01 126 views
1

下面的代码是我有问题的理解是什么:如何在Java中将对象属性值赋给变量?

public class Rectangle { 

    public Rectangle() { 
     double width = 1; 
     double height = 1; 
    } 

    public Rectangle(double w, double h) { 
     double width = w; 
     double height = h; 
    } 

    public double getArea(double w, double h) { 
     return (w*h); 
    } 

    public double getPerimeter(double w, double h) { 
     return ((2*w)+(2*h)); 
    } 

    public static void main(String[] args) { 
     Rectangle oldRectangle = new Rectangle(4, 40); 
     Rectangle newRectangle = new Rectangle(3.5, 35.9); 
     double height1 = oldRectangle.height; 
     double height2 = newRectangle.height; 
     double width1 = oldRectangle.width; 
     double width2 = newRectangle.width; 

     System.out.println("Width of Rectangle 1 is: " + 4); 
     System.out.println("Height of Rectangle 1 is: " + 40); 
     System.out.println("Area of Rectangle 1 is: " + oldRectangle.getArea(4, 40)); 
     System.out.println("Perimeter of Rectangle 1 is: " + oldRectangle.getPerimeter(4, 40)); 
     System.out.println("Width of Rectangle 1 is: " + 3.5); 
     System.out.println("Height of Rectangle 1 is: " + 35.9); 
     System.out.println("Area of Rectangle 1 is: " + newRectangle.getArea(3.5, 35.9)); 
     System.out.println("Perimeter of Rectangle 1 is: " + newRectangle.getPerimeter(3.5, 35.9)); 

    } 

} 

我奉命创建两个构造一个Rectangle类,一个不带任何参数,但对于这两个变量分配的默认值1宽度和高度。第二个构造函数是包含两个参数,这些参数将被分配到相应的变量中。

我被告知创建两个返回它们各自的值的'get()'方法 - 在我的情况下,它们是所述Rectangle的周长和面积。

然后我被指示创建两个Rectangle实例,一个宽度为4,高度为40,另一个宽度为4.5,高度为35.9。所以,我做了这件事,并制作了两个新的Rectangle对象,如你所见。

最后,我被指示打印出两个矩形对象的宽度,高度,周长和面积。我的问题是,我不知道有一种方法来引用它们。我为JavaScript学习了一个初学者教程课程,如果我没有弄错,我记得有一种方法可以通过将对象的属性值分配给一个变量来引用它。我再次说“如果我没有弄错”,所以我可能会错的。它已经有一段时间了......我认识到Java和Java Script本身就是完全不同的东西。 Java脚本是一种基于Java开发的脚本语言。

无论如何,任何帮助将是盛大的。

请随时帮助我了解如何通过给出示例来实现我想要做的事情。你没有使用我的确切代码,但我希望能够让我的代码更有意义..我使用Eclipse btw。

+1

Java和JavaScript是像汽车和地毯 – KarelG 2015-04-01 16:19:24

+0

我不了解您的问题,您可以参考代码中已有的对象宽度和高度属性。 – 2015-04-01 16:19:29

+1

您创建的字段宽度和高度只存在于您的构造函数中。你需要让他们成为全球化的课堂。那么你可以让getter和setter fot这些字段 – user902383 2015-04-01 16:21:53

回答

0

我的问题是,我不知道的方式引用它们

由于Java是一种强类型语言,存储到每个矩形(或任何对象)属性的引用,您必须创建与该字段匹配的变量。

首先,你需要你的矩形有属性:

public class Rectangle { 
    public double width; 
    public dobule height; 

    // constructors here... 

后,方法来计算面积和周长:

public double getArea() { 
    return (width*height); 
} 

public double getPerimeter() { 
    return ((2*width)+(2*height)); 
} 

现在,引用他们(我猜你仍然平均面积和周长):

double area1 = getArea(newRectangle); 
double area2 = getArea(oldRectangle); 

double perimeter1 = getPerimeter(newRectangle); 
double perimeter2 = getPerimeter(oldRectangle); 
+0

我不知道我可以做到这一点,所以谢谢@Jordi Castilla,但是,我将如何能够引用我创建的对象的高度和宽度属性? – 2015-04-02 03:31:17

+0

只需要创建对象的名称和'.propertyName'即:对于一个新的'Rectangle rectangle = new Rectangle()'你可以用'rectangle.height'引用'height' – 2015-04-02 07:16:41

+0

*为了改善你的代码,计算方法区域和边界**必须**使用Rectangle对象*! **不,他们不**,这是不正确的,在面向对象的方法中,它们不是期望对象的函数。请不要与[**函数编程**](http://fr.wikipedia.org/wiki/Functional_Programming)混淆。面向对象编程(OOP)中的**方法**是一个与对象类相关的过程,请看[** here **](http://en.wikipedia.org/wiki/Method_(computer_programming) ) 了解更多信息。 – 2015-04-02 10:05:44

1

您正处在正确的轨道上。你要做的是这样的:

public double getArea(Rectangle r){ 
     return r.width*r.height; 
} 
public double getPerimeter(Rectangle r){ 
     return (2*r.width + 2*r.height); 
} 

对于打印语句,你是硬编码的值,你不必做。

System.out.println("Width of Rectangle 1 is: " + oldRectangle.width); 
    System.out.println("Height of Rectangle 1 is: " + oldRectangle.height); 
    System.out.println("Area of Rectangle 1 is: " + getArea(oldRectangle)); 
    System.out.println("Perimeter of Rectangle 1 is: " + getPerimeter(oldRectangle)); 
+0

这是**不正确**将对象传递给方法这是**面向对象编程**而不是**函数式编程**在这里,OOP方法应用于对象,它们不是期望对象的函数。请不要与[**函数编程**](http://fr.wikipedia.org/wiki/Functional_Programming)混淆。 面向对象编程(OOP)中的**方法**是一个与对象类相关的过程,请看[** here **](http://en.wikipedia.org/wiki/Method_( computer_programming))以获取更多信息。 – 2015-04-02 10:17:38

0

有你的班上没有width和height属性,它们只是在构造函数中定义的类,而不是构造函数内声明的他们,你可以这样存取权限其中:

public class Rectangle { 

    double width; 
    double height; 

    public Rectangle() { 
     width = 1; 
     height = 1; 
    } 

public Rectangle(double w, double h) { 
    width = w; 
    height = h; 
} 

public double getArea(double w, double h) { 
    return (w*h); 
} 

public double getPerimeter(double w, double h) { 
    return ((2*w)+(2*h)); 
} 
//.... 
} 

注意:最好宣布他们为私人并使用getter和setters来访问它们,看看Adding Setter and Getter Methods获取更多信息。

编辑:

你的情况,你不需要将参数传递给你的方法(因为计算需要这个矩形的宽度和高度),只用你的类字段计算它们,就像这样:

public double getArea() { 
    return (width*height); 
} 

public double getPerimeter() { 
    return ((2*width)+(2*height)); 
} 

下面是你需要做的,进入您的变量是什么:

public static void main(String[] args) { 
    Rectangle oldRectangle = new Rectangle(4, 40); 
    Rectangle newRectangle = new Rectangle(3.5, 35.9); 

    //In the following you access all the object variables and methods 

    System.out.println("Width of Rectangle 1 is: " + oldRectangle.width); 
    System.out.println("Height of Rectangle 1 is: " + oldRectangle.height); 
    System.out.println("Area of Rectangle 1 is: " + oldRectangle.getArea()); 
    System.out.println("Perimeter of Rectangle 1 is: " + oldRectangle.getPerimeter()); 
    System.out.println("Width of Rectangle 1 is: " + newRectangle.width); 
    System.out.println("Height of Rectangle 1 is: " + newRectangle.height); 
    System.out.println("Area of Rectangle 1 is: " + newRectangle.getArea()); 
    System.out.println("Perimeter of Rectangle 1 is: " + newRectangle.getPerimeter()); 

} 

你可以测试the DEMO here

并回答您关于使用构造函数,调用参数化构造这样的问题:

Rectangle oldRectangle = new Rectangle(4, 40); 

等同于:

// create the object 
Rectangle oldRectangle = new Rectangle(); 
//And then assigning the values 4 and 40 to its width and height  
oldRectangle.width=4; 
oldRectangle.height=40; 
+0

感谢您的输入。然而,我仍然对某些东西感到迷失:那么创建两个Rectangle对象实际上是做什么的呢?如果我传递的参数实际上并没有被设置为适合这些对象的值,那么为什么我会费心制作构造函数呢?而且,当我使用构造函数来创建这些对象时,实际上“构造”了什么? – 2015-04-02 03:23:47

+0

@ThatRandomGuy在我的EDIT中进行了一番尝试,你会发现所有问题的答案。 – 2015-04-02 07:14:42

+0

私人getters ans setter对他来说不是一个好的选择,如果你在Main方法里面使用'this',那么你就不会得到期望的结果......这个答案是非常完整的(btw不完全正确)但我认为太多的OP问题... – 2015-04-02 07:24:37