数学中总是会求反函数,如:
写了一个 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; //宽
}
写了一个 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; //宽
}
c = 2*(w+h)
数学解方程,求出w和h的表达式,带入程序。
比如这个 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;
}以上两种哪一种好呢?
还是两个都不好,有一个非常潇洒的方法?
请指教,各位。
方案1应该是不可行的,或者说不太好,因为一旦你构造了这个类,就可以调用public方法了。这是如果你设了个周长,却去调了取面积之类的方法,虽然说是用户的误操作,但是能防止的还是尽量防止这种可能。个人觉得,set,get方法可以取消,构造方法也取消,这个类就全部静态方法,传参数,算结果。
本身就是很简单的计算,没必要再分几步操作了,你需要new一个类,set长,宽,再取面积,周长
不如直接一个方法,传入长宽,取得面积,周长。
就像 java.math.*;看来我还是把要用的公式建一个包。
a=1 b=-c/2 c=s
公式: (-b+-根号b^2-4ac)/2a