0

我正在尝试计算系列 1、3、9、27、81 的前 16 个元素的总和。代码通过首先创建一个合适的 Geometric 实例来实现,该实例将是 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);
}

}

不知道我是否在做这个很长的路要走?它还没有工作,eclipse 说我需要将 sum 的修饰符更改为 static?

4

4 回答 4

4

它希望sum是静态的,因为您试图在静态方法中达到 sum main,. 您无法访问静态方法中的非静态字段。您应该创建一个Geometricinside实例main,然后您应该调用该变量sum

public static void main(String[] args) {
    Geometric geo = new Geometric(some_number);
    System.out.println(geo.sum);
}

另外,你的做事方式也不是面向对象编程概念的好方法。

您正在从一个方法返回系列的总数,但您还将它存储在一个名为 的字段中sum,并且sum在计算它之前您需要。相反,您应该从该方法中获取总数。

public static void main(String[] args) {
    Geometric geo = new Geometric(3.0);
    System.out.println(geo.total());
}

由于该方法total是为此类的实例指定的,因此不应创建新实例来计算总数,而应计算当前实例的总数。

public double total() {
    double temp = 1;
    double sum = 0;
    for (int a = 0; a < 16; a++) {
        sum += temp;
        temp *= this.b;
    }
    return sum;
}
于 2012-08-09T22:25:09.943 回答
1

好像你把它弄得比它需要的复杂一点。以下是我在不使用另一个类的情况下的做法(代码可以放在任何需要计算总和的类中):

int currentNumber = 1;
int sum = 0;
for (int i = 0; i < 16; i++)
{
    sum += currentNumber;
    currentNumber *= 3;
}

几何序列中各项之和的值将存储在变量 中sum。或者,对几何序列中的项之和使用封闭形式:

int firstNumber = 1;
int multFactor = 3;
int numTerms = 16;
int sum = firstNumber * ((1 - multFactor ^ numTerms) / (1 - multFactor));

或者在你的情况下:

int sum = 1 * ((1 - 3^16) / (1 - 3));  // returns 21523360, the number you were trying to calculate
于 2012-08-09T22:25:45.313 回答
0

eclipse是说我需要将sum的修饰符更改为static?

因为您正在sum以静态方法打印出来main(String[])。您不能从静态方法访问实例字段。您需要创建一个 Geometric 实例并sum从该实例中获取。

于 2012-08-09T22:25:19.507 回答
0

total 和 sum 看起来应该是静态的。我不知道 getSum 是干什么用的。但真正的问题是,为什么不直接将数字相加?你不需要所有的课程。

于 2012-08-09T22:27:03.487 回答