有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

计算矩形的面积、长度和宽度

我知道也有类似的线索:

Calculating perimeter and area of a rectangle

但我还是不知道该怎么办

public class Rectangle {

double length, height, rectArea; // assigning variables for length, height and area of the rectangle

Point ul; // assigning variables for all corners
Point ur;
Point lr;
Point ll;

Rectangle(Point p_ul, Point p_ur, Point p_lr, Point p_ll) { //constructor assigning Point variables 
    ul = p_ul;
    ur = p_ur;
    lr = p_lr;
    ll = p_ll;        
}

Rectangle(int x_ul, int y_ul, int x_ur, int y_ur, int x_lr, int y_lr, int x_ll, int y_ll) { //constructor assigning coordinates for each corner Point variable
    ul = new Point (x_ul, y_ul);
    ur = new Point (x_ur, y_ur);
    lr = new Point (x_lr, y_lr);
    ll = new Point (x_ll, y_ll);        
}

public double rectArea() {
    double length = Math.sqrt( (ur.getX()-ul.getX()) * (ur.getX()-ul.getX()) ) + ( (ur.getY()-ul.getY()) * (ur.getY()-ul.getY()) ); //calculates length
    double height = Math.sqrt( (ur.getX()-lr.getX()) * (ur.getX()-lr.getX()) ) + ( (ur.getY()-lr.getY()) * (ur.getY()-lr.getY()) ); //calculates height

    return(length * height);
}

void displayInfo() { //Print statements   
    System.out.println("Rectangle Info: ");
    System.out.println("Upper Left Point (x,y) : (" + ul.getX() + "," + ul.getY() + ")");
    System.out.println("Upper Right Point (x,y) : (" + ur.getX() + "," + ur.getY() + ")");
    System.out.println("Lower Left Point (x,y) : (" + ll.getX() + "," + ll.getY() + ")");
    System.out.println("Lower Right Point (x,y) : (" + lr.getX() + "," + lr.getY() + ")");        
    System.out.println("Area: " + rectArea);
    System.out.println("Length: " + length);
    System.out.println("Height: " + height);
    System.out.println("ur-lr(Y): " + (ur.getY()-lr.getY()));// this prints 4
    System.out.println("ur-lr(X): " + (ur.getX()-lr.getX()));// this prints 0
}    
}

我不知道为什么我用实际的ul来计算长度和高度。得到(X)等我得到了正确的长度和高度输出,但当我打印“长度”和“高度”时,我只得到0,因此使我的面积为0

你很可能知道我是n00b。谢谢你的帮助


共 (2) 个答案

  1. # 1 楼答案

    您没有调用rectArea()方法,而是尝试直接使用未计算的变量。 下面是正确的程序:

    import java.awt.Point;
    public class Rectangle {
    
    double length, height, rectArea; // assigning variables for length, height and area of the rectangle
    
    Point ul; // assigning variables for all corners
    Point ur;
    Point lr;
    Point ll;
    
    Rectangle(Point p_ul, Point p_ur, Point p_lr, Point p_ll) { //constructor assigning Point variables 
        ul = p_ul;
        ur = p_ur;
        lr = p_lr;
        ll = p_ll;        
    }
    
    Rectangle(int x_ul, int y_ul, int x_ur, int y_ur, int x_lr, int y_lr, int x_ll, int y_ll) { //constructor assigning coordinates for each corner Point variable
        ul = new Point (x_ul, y_ul);
        ur = new Point (x_ur, y_ur);
        lr = new Point (x_lr, y_lr);
        ll = new Point (x_ll, y_ll);        
    }
    
    public double rectArea() {
        length = Math.sqrt( (ur.getX()-ul.getX()) * (ur.getX()-ul.getX())  + (ur.getY()-ul.getY()) * (ur.getY()-ul.getY()) ); //calculates length
        height = Math.sqrt( (ur.getX()-lr.getX()) * (ur.getX()-lr.getX())  + (ur.getY()-lr.getY()) * (ur.getY()-lr.getY()) ); //calculates height
    
        return(length * height);
    }
    
    void displayInfo() { //Print statements   
        System.out.println("Rectangle Info: ");
        System.out.println("Upper Left Point (x,y) : (" + ul.getX() + "," + ul.getY() + ")");
        System.out.println("Upper Right Point (x,y) : (" + ur.getX() + "," + ur.getY() + ")");
        System.out.println("Lower Left Point (x,y) : (" + ll.getX() + "," + ll.getY() + ")");
        System.out.println("Lower Right Point (x,y) : (" + lr.getX() + "," + lr.getY() + ")"); 
        rectArea = rectArea();
        System.out.println("Area: " + rectArea);
        System.out.println("Length: " + length);
        System.out.println("Height: " + height);
        System.out.println("ur-lr(Y): " + (ur.getY()-lr.getY()));// this prints 2
        System.out.println("ur-lr(X): " + (ur.getX()-lr.getX()));// this prints 0
    }
    public static void main(String[] args) {
        Rectangle rr = new Rectangle(1,3,3,3,3,1,1,1);
        rr.displayInfo();
    }
    }
    
  2. # 2 楼答案

    您有两个与实例变量同名的局部变量。这被称为隐藏变量。因此,当你通过这些方法调用它们时,你会得到正确的结果。但您的实例变量尚未初始化。所以它们有默认的双精度值,即0.0

    像这样改变你的方法

    public double rectArea() {
        length = Math.sqrt((ur.getX()-ul.getX()) * (ur.getX()-ul.getX())) + ((ur.getY()-ul.getY()) * (ur.getY()-ul.getY())); //calculates length
        height = Math.sqrt((ur.getX()-lr.getX()) * (ur.getX()-lr.getX())) + ((ur.getY()-lr.getY()) * (ur.getY()-lr.getY())); //calculates height
    
        return(length * height);
    }