为啥rec.area 和rec.perimeter 总是0?

Posted

技术标签:

【中文标题】为啥rec.area 和rec.perimeter 总是0?【英文标题】: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() 【参考方案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 谢谢,我没有看到这个。在家办公? 不,每周都要传真一个请求

以上是关于为啥rec.area 和rec.perimeter 总是0?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 int 存在于 C 中,为啥不只是 short 和 long

为啥 Wordpress 有单独的 'usersmeta' 和 'users' SQL 表。为啥不把它们结合起来?

为啥区分 AssemblyFileVersion 和 AssemblyVersion

为啥 FileManager 和 Finder 不匹配?

为啥黄瓜和水豚叫那个?

为啥自动关闭延迟评估和正常关闭不?