2012-08-09 58 views
2

我已完成此操作,但在b部分有困难。这是一份模拟考试试卷,对b部分的其余部分无法确定。Java - 执行另一个类并修改方法

Q) 总结s.valAtIndex(i)给出的序列的元素。 s是Seq类型的。 Seq是一个接口,它有一个方法valAtIndex (integer parameter and double result)。 (a)编写接口Seq。 (b)写一个几何类,实现Seq。使得每个实例s表示如下的几何级数: s.valAtIndex(0), s.valAtIndex(0) ... ,使得第i个元素s.valAtIndex(i)等于基底b的第i个幂,即b^i。 (记得是b^0 = 1)

(一)

public interface Seq{ 

public double valAtIndex(int i); 
} 

(B)

public Geometric implements Seq{ 

Seq s; 
private double b; 

public Geometric(double a){ 

s = new Geometric(a); 
this.b=a; 
} 

@Override 
public double valAtIndex(int i){ 

return 0;//not sure how to do this method 

} 
+0

你并不需要创建您的构造函数中Geometric'的'一个实例。这就是构造函数正在做的事情。 – Dancrumb 2012-08-09 21:07:25

+1

@Dancrumb这将是一个无限的递归循环,导致一个stackoverflow异常。另外,如果这样的标签更好,它会很好...... a-> r,i-> n。 valAtIndex非常简单,只需使用公式:u0 * r ^(n-1)。 – 2012-08-09 21:08:26

回答

7

你的意思是这样的:

@Override 
public double valAtIndex(int i) { 
    return Math.pow(b, i); 
} 

编辑:此外,正如其他答案中提到的,删除Seq s;和关于它在构造函数中的行。你应该在结尾处是:

public class Geometric implements Seq { 
    private double b; 

    public Geometric(double a) { 
     this.b=a; 
    } 

    @Override 
    public double valAtIndex(int i){ 
     return Math.pow(b, i); 
    } 
} 
+0

关于编辑:我对接口方法的'@ Override'标记有点困惑,http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-为什么要清理一些东西。 – 2012-08-09 21:21:09

+0

下次会记住这一点,谢谢 – nsc010 2012-08-09 21:24:08

0

首先,

@Override 
public double valAtIndex(int i) { 
    return Math.pow(b, i); 
} 

这将返回b以我的力量。

但是,您的代码会导致堆栈溢出异常。你可以在构造函数中调用几何构造函数。导致对构造函数的连续调用和异常。

你需要你的构造函数改为

public Geometric(double a) { 
    this.b = a; 
} 

此外,还需要将其声明为class Geometric而不是public Geometric

+0

对不起,我忘了添加课程,输入我写的内容 – nsc010 2012-08-09 21:15:57

相关问题