数学中总是会求反函数,如:
写了一个 y=f(x)的类,但是现在要求 x=f(Y), 这个类怎么写呢?
如现有一个 矩形类, 用 长、宽构造, 使用 get求的 周长和面积,
但是现在要通过 周长或面积求长或宽,怎么办呢?public class Rectangle {
// constructor
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
        //求周长
public double getPerimeter() {
return 2 * length + 2 * width;
}
        //求面积
public double getArea() {
return length * width;
}
private double length;    //长
private double width;     //宽
}

解决方案 »

  1.   

    s = w*h
    c = 2*(w+h)
    数学解方程,求出w和h的表达式,带入程序。
      

  2.   

    对不起各位,是我说错了,不是要写各类求通用反函数,而是说:
    比如这个 Rectangle 类,通过面积或周长以及任意一边,求另一边的数学公式我是知道的,
    但是这个类怎么组织呢?
    因为要 new 一个对象,首先要用 length, width 构造一个对象,
    // constructor
        public Rectangle(double length, double width) {
            this.length = length;
            this.width = width;
        }
    现在的 length或width需要通过 get方法 求得。
    比如需要通过 周长 求 length, 我现在又两个办法,
    1. 利用 周长 作为 setLength 的参数,然后返回 length,见
       public double getLengthByAPerimeter(double perimeter) 方法。
    2. 使用静态方法, 见
       public static double getLengthByPerimeterAndWidth() 方法。
    public class Rectangle {
    // constructor
    public Rectangle(double length, double width) {
    this.length = length;
    this.width = width;
    }
    public double getLength() {
    return length;
    }
            //第一种方法,通过setLength求的:
    public double getLengthByAPerimeter(double perimeter) {
    this.setLength((perimeter - 2 * this.width) / 2);
    return this.length;
    }
    public void setLength(double length) {
    this.length = length;
    }
    public double getWidth() {
    return width;
    }
    public void setWidth(double width) {
    this.width = width;
    }
    public double getPerimeter() {
    return 2 * length + 2 * width;
    }
    public double getArea() {
    return length * width;
    }
            //第二种方法,通过静态方法求的:
    public static double getLengthByPerimeterAndWidth(
    double perimeter, double width) {
    return (perimeter - 2 * width) / 2;
    }
    private double length;
    private double width;
    }以上两种哪一种好呢?
    还是两个都不好,有一个非常潇洒的方法?
    请指教,各位。
      

  3.   


    方案1应该是不可行的,或者说不太好,因为一旦你构造了这个类,就可以调用public方法了。这是如果你设了个周长,却去调了取面积之类的方法,虽然说是用户的误操作,但是能防止的还是尽量防止这种可能。个人觉得,set,get方法可以取消,构造方法也取消,这个类就全部静态方法,传参数,算结果。
    本身就是很简单的计算,没必要再分几步操作了,你需要new一个类,set长,宽,再取面积,周长
    不如直接一个方法,传入长宽,取得面积,周长。
      

  4.   

    justlearn兄,说得有理,静态方法比较好,
    就像 java.math.*;看来我还是把要用的公式建一个包。
      

  5.   

    整理  w^2-(c/2)w+s=0
    a=1 b=-c/2 c=s
    公式: (-b+-根号b^2-4ac)/2a