Java - 计算一系列数字的总和

时间:2012-08-09 22:19:58

标签: java

我正在尝试计算系列1,3,9,27,81的前16个元素的总和。代码通过首先创建一个将是TYPE Seq的Geometric的合适实例来实现。

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 个答案:

答案 0 :(得分:5)

它希望sum是静态的,因为您试图在静态方法main中达到和。您无法访问静态方法中的非静态字段。您应该在Geometric内创建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;
}

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

好像你让它变得有点复杂然后需要它。以下是我不使用其他类的方法(代码可以在任何需要计算总和的类中):

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

几何序列中术语总和的值将存储在变量sum中。或者,使用closed form作为几何序列中术语的总和:

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

答案 3 :(得分:0)

总和和看起来他们应该是静态的。我不知道getSum的用途。但真正的问题是,你为什么不直接加上这些数字呢?你不需要任何课程。