我被困在模拟考试问题上。我创建了一个名为Power
的类,它允许将一个数字提升到任何幂。
问题的第三部分要求我创建另一个类BoundedPower
,它将扩展Power
。我被赋予了MAX-X
变量(x不能超过这个值),并告诉BoundedPower
类必须:表现得像Power
类,使用构造函数并使用powN
方法
我的代码如下,我不知道如何使BoundedPower
班级工作。
public class Power {
private double x = 0;
Power(double x) {
this.x = x;
}
public double getX() {
return x;
}
public double powN(int n) {
double result = 1.0;
for (int i = 0; i < n; i++) {
result = result * x;
}
return result;
}
public static void main(String[] args) {
Power p = new Power(5.0);
double d = p.powN(3);
System.out.println(d);
}
}
public class BoundedPower extends Power {
public static final double MAX_X = 1000000;
// invariant: x <= MAX_X
Power x;
BoundedPower(double x) {
super(x);
// this.x=x; x is private in Power class
}
public double powN(int n) {
if (x.getX() > MAX_X) {
return 0;
} else {
double result = 1.0;
for (int i = 0; i < n; i++) {
result = result * getX();
}
return result;
}
}
public static void main(String[] args) {
BoundedPower bp = new BoundedPower(5);
double test = bp.powN(4);
System.out.println(test);
}
}
答案 0 :(得分:3)
您的班级中不需要该实例Power变量x。任何BoundedPower实例都是一个Power实例,因此,要从Power引用一个方法,请执行super.blah(),所以对于x.getX(),执行super.getX()
此外,在你的评论中,你说this.x = x失败,因为它是私有的。当你进行超级调用时,它调用超类(Power)的构造函数,它在那里设置x,所以不需要this.x = x
答案 1 :(得分:1)
public class BoundedPower extends Power {
public static final double MAX_X = 1000000;
BoundedPower(double x) {
super(x);
}
public double powN(int n) {
if (x.getX() > MAX_X) {
return 0;
} else {
return super.powN(n);
}
}
public static void main(String[] args) {
BoundedPower bp = new BoundedPower(5);
double test = bp.powN(4);
System.out.println(test);
}
}
您不必将计算公式复制到子类(只需调用super.powN(..)
)。您在Power
中也不需要BoundedPower
的其他实例。
答案 2 :(得分:1)
这可能是他们想到的:
public class Power {
public double powN(double x, int n) {
double result = 1.0;
for (int i = 0; i < n; i++) {
result = result * x;
}
return result;
}
}
public class BoundedPower extends Power {
private final double maxX;
public BoundedPower(double maxX) {
this.maxX = maxX;
}
public double powN(double x, int n) {
if (x > maxX) {
throw new IllegalArgumentException("x value [" + x + "] " +
"greater than expected max [" + maxX + "]");
}
return super.powN(x, n);
}
}
答案 3 :(得分:1)
我会以不同的方式做到这一点。根据你的说法,BoundedPower类只对有界x(最多MAX_X)有意义。
因此,我不允许创建x大于MAX_X的对象(即无界x的BoundedPower对象不存在)
因此除了构建BoundedPower实例的方式之外,实现将与Power实现完全相同:首先检查构建它是否有意义
public class BoundedPower extends Power {
private static final double MAX_X = 1000000; //makes no sense to be public
public static BoundedPower newBoundedPower(int n)
throws IllegalNumberException{
if(x > MAX_X) throw new IllegalNumberException();
return new BoundedPower(x);
}
private BoundedPower(double x) {
super(x);
}
}