为啥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);
【问题讨论】:
因为您在任何地方都没有为area
或perimeter
赋值。
您不应该将方法命名为与字段相同的名称,这会产生误导(如您的示例所示)。如果您实际调用该方法,您将得到您期望的结果。喜欢rec.area()
【参考方案1】:
因为area
和perimeter
的值没有改变,在你的方法中你必须将它们设为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 表。为啥不把它们结合起来?