我正在尝试计算系列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?
答案 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的用途。但真正的问题是,你为什么不直接加上这些数字呢?你不需要任何课程。