2013-10-19 28 views
-1

我正在制作一个有2个班级的课程。一个是所有方法的类,另一个是测试者类。它似乎为所有事物都返回了正确的价值,但是这个边界?如果任何人有任何建议我在看什么,将非常感激。第一类是方法类。为什么它不正确计算边界?

public class Rec 
    { 
     private double returnedWidth; 
     private double returnedLength; 
     private double returnedPerimeter; 
     private double returnedArea; 
     public Rec(double width, double length){ 
      returnedWidth= width; 
      returnedLength= length; 
     } 

     public double getLength(){ 
      return returnedLength; 
     } 

     public double getWidth(){ 
      return returnedWidth; 
     } 
     public void findPerimeter(){ 
      returnedPerimeter= (2*returnedWidth) + (2*returnedLength); 
     } 
     public double getPerimeter(){ 

     return returnedPerimeter; 
    } 
     public void findArea(){ 

      returnedArea= returnedLength*returnedWidth; 
     } 
    public double getArea(){ 
     return returnedArea; 
    } 
    } 

这第二类是测试类

public class RecTester 
    { 
     public static void main(String[] args){ 
      Rec ABC= new Rec(5, 10); 

      System.out.println("The rectangle's width is " + ABC.getWidth()); 
      System.out.println("Expected: 5"); 
      System.out.println("The rectangle's area is " + ABC.getLength()); 
      System.out.println("Expected: 10"); 
      System.out.println("The rectangles perimeter is " +ABC.getPerimeter()); 
      System.out.println("Expected: 30"); 
      System.out.println("The rectangles area is " + ABC.getArea()); 
      System.out.println("Expected: 50"); 

     } 
    } 

这里在运行时输出,

The rectangle's width is 5.0 
Expected: 5 
The rectangle's area is 10.0 
Expected: 10 
The rectangles perimeter is 10.0 
Expected: 30 
The rectangles area is 50.0 
Expected: 50 
+3

你遗漏了一些东西。 'findPerimeter'和'findArea'永远不会被调用... – DaoWen

回答

3

您已经实现,你必须调用findPerimeter()你叫getPerimeter()之前得到的方法正确的价值。只有你知道你为什么这样做,但我建议你按照这个顺序调用它们,否则你不需要先调用这个方法。

2

你需要调用findPerimeter如果你想确保你询问变量中有正确的价值......在你的代码仔细看看:

public void findPerimeter(){ 
     returnedPerimeter= (2*returnedWidth) + (2*returnedLength); 
    } 
    public double getPerimeter(){ 

    return returnedPerimeter; 
} 

你在哪里打电话findPerimeter()

你可以改变getPerimeter()

public double getPerimeter(){ 
     return (2*returnedWidth) + (2*returnedLength); 
    } 

,你将是所有组(至少与代码的该位)。

2

在调用getPerimeter()之前,您尚未调用findPerimeter()。只需要findPerimeter()返回结果而不是存储它,让getPerimeter()返回findPerimeter()(或者直接执行计算),然后删除周长变量。

3

问题是与你的API的设计:你有一个叫依赖,使得调用getPerimeter必须调用findPerimeter后发生。你应该避免这样做:至少,在getPetimeter内拨打findPerimeter

最好的方法,但是,是计算周长在0​​方法:

public double getPerimeter() { 
    return (2*returnedWidth) + (2*returnedLength); 
} 
public double getArea(){ 
    return returnedLength*returnedWidth; 
} 
// you also drop the findPerimeter and findArea methods 

注:有时是难以避免的“懒”的计算与高速缓存,当你计算的东西一旦和存储结果供将来参考。在这种情况下,您应该将调用函数放在getter中,并检查缓存的值。