2012-08-09 64 views
0

我想要計算出系列1,3,6,9,27,81中前16個元素的總和....代碼是這樣做的:首先創建一個合適的幾何的實例將是TYPE Seq。Java - 計算一系列數字的總和

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); 
} 

}

不知道如果我這樣做了很長的路圓的嗎?它還沒有工作,日食是說我需要改變總和修飾符爲靜態?

+2

幾何系列的總和有一個封閉的形式。請參閱[幾何進程](http://en.wikipedia.org/wiki/Geometric_progression)上的維基百科文章 – 2012-08-09 22:33:45

回答

5

它希望sum是靜態的,因爲您試圖在靜態方法main內達到和。您無法訪問靜態方法內的非靜態字段。您應該在main內部創建一個Geometric的實例,然後您應該調用變量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

日食說我需要總結的修飾符改爲靜態的?

因爲您正在用靜態方法打印summain(String[])。您不能從靜態方法訪問實例字段。您需要創建Geometric的實例,並從該實例獲取sum

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 
+0

是的,當我嘗試創建seq實例時'Seq s =新幾何(3。0);因爲我必須創建一個幾何類型Seq – nsc010 2012-08-09 22:37:14

+0

的實例,但'Geometric s = new Geometric(3.0); \t \t System.out.println(s.total());'確實有效。不知道我是否誤解了模擬問題,或者如果這是好的? – nsc010 2012-08-09 22:40:40

+0

@ nsc010在編輯後看看我的帖子:我認爲最簡單的方法就是使用幾何系列的封閉形式)。 – 2012-08-09 22:47:41

0

總與和看起來像他們應該是靜態的。我不知道getSum是什麼。但真正的問題是,爲什麼你不直接加上數字?你不需要上課。