为什么Rec.area和rec.perimeter始终为0?

时间:2020-03-27 08:22:21

标签: java methods

我不明白为什么rec.area和rec.perimeter只打印0

矩形

class Rectangles {

        int weight;
        int height;
        int area;
        int perimeter;

        int area (int weight, int height) {
            return  weight * height;
        }

        int perimeter (int weight, int height) {
            return  2 * (weight + height);
        }
    }

RectanglesTest

class RectanglesTest {
    public static void main(String[] args)  {

        Rectangles rec = new Rectangles();

        rec.weight = 10; 
        rec.height = 15; 

        System.out.println(rec.weight);
        System.out.println(rec.height);
        System.out.println(rec.area);
        System.out.println(rec.perimeter);
    }
}

2 个答案:

答案 0 :(得分:1)

您将字段名与方法名混淆-最好使它们不同,但无论如何都要与您的代码

public static void main(String[] args) {

  Rectangles rec = new Rectangles();

  rec.weight = 10; 
  rec.height = 15; 

  System.out.println(rec.weight);
  System.out.println(rec.height);
  System.out.println(rec.area ());
  System.out.println(rec.perimeter ());
}

在使用字段时,不需要将其他参数传递给这些方法,因此将其更改为

int area () { ....}
int perimeter () { ....}

更好地命名方法是动词,例如calcArea

实际上您不使用

int area;
int perimeter;

所以您可以删除它们

答案 1 :(得分:0)

由于areaperimeter的值没有变化,因此在您的方法中,必须将它们设为void并将计算出的值分配给请求的属性

class Rectangles {

        int weight;
        int height;
        int area;
        int perimeter;

        void area () {
            area = weight * height;
        }

        void perimeter () {
            perimeter = 2 * (weight + height);
        }
}

在您的main方法中,您必须先调用这些方法

public static void main(String[] args) {

  Rectangles rec = new Rectangles();

  rec.weight = 10; 
  rec.height = 15; 
  rec.area();
  rec.perimeter();
  System.out.println(rec.weight);
  System.out.println(rec.height);
  System.out.println(rec.area);
  System.out.println(rec.perimeter);
}