【问题标题】:why rec.area and rec.perimeter are always 0?为什么rec.area 和rec.perimeter 总是0?
【发布时间】:2020-07-07 23:17:22
【问题描述】:

我不明白为什么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);
        }
    }

矩形测试

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);
    }
}

【问题讨论】:

  • 因为您在任何地方都没有为areaperimeter 赋值。
  • 您不应该将方法命名为与字段相同的名称,这会产生误导(如您的示例所示)。如果您实际调用该方法,您将得到您期望的结果。喜欢rec.area()

标签: java methods


【解决方案1】:

因为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);
}

【讨论】:

  • 那么你必须另外调用方法来分配这些值。
【解决方案2】:

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

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 () { ....}

更好的命名方法是动词,例如计算面积

其实你不用

int area;
int perimeter;

所以你可以删除它们

【讨论】:

  • 可能还需要指出area()perimeter()方法也需要正确实现...
  • @RobbyCornelissen 谢谢,我没有看到这个。在家办公?
  • 不,每周都要传真一个请求
猜你喜欢
  • 1970-01-01
  • 2021-04-14
  • 2011-12-28
  • 2011-12-28
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
相关资源
最近更新 更多