我试图计算系列1,3,9,27,81的前16个元素的总和....代码通过首先创建一个适合的TYPE Seq实例来实现.
public class Geometric implements Seq {
private double b;
public Seq s;
public double sum;
public Geometric(double a) {
this.b = a;
}
public double valAtIndex(int i) {
// TODO Auto-generated method stub
return Math.pow(b, i);
}
public double total() {
s = new Geometric(3.0);
for (int a = 0; a < 16; a++) {
int c = -1;
sum = sum + s.valAtIndex(c = c + 1);
c++;
}
return sum;
}
public double getSum() {
return sum;
}
public static void main(String[] args) {
System.out.println(sum);
}
Run Code Online (Sandbox Code Playgroud)
}
不确定我是否正在这么长时间做这件事?它还没有工作,eclipse说我需要将sum的修饰符更改为static?
它想要sum静态,因为你试图在静态方法中达到总和,main.您无法访问静态方法中的非静态字段.你应该创建一个Geometricinside 实例main,然后你应该调用变量sum.
public static void main(String[] args) {
Geometric geo = new Geometric(some_number);
System.out.println(geo.sum);
}
Run Code Online (Sandbox Code Playgroud)
而且,你的做事方式并不是面向对象编程概念的好方法.
您正在从方法返回系列的总数,但您也将它存储在一个名为的字段中sum,并且sum在计算之前您需要它.相反,你应该从方法中得到总数.
public static void main(String[] args) {
Geometric geo = new Geometric(3.0);
System.out.println(geo.total());
}
Run Code Online (Sandbox Code Playgroud)
由于该方法total是为此类的实例指定的,因此不应创建新实例来计算总数,而应计算当前实例的总数.
public double total() {
double temp = 1;
double sum = 0;
for (int a = 0; a < 16; a++) {
sum += temp;
temp *= this.b;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)