2015-08-24 34 views
0

我仍然是在java中使用方法的初學者。我想使用方法在java中打印以下系列。在java中使用方法的錯誤

1 + (1+2)/2! + (1+2+3)/3!.....n terms 

我已經做了這麼多。我想知道爲什麼我不能在sum2方法中使用s

public class SERIES { 
    int factorial(int n) { 
    int res = 1; 
    for (int i = 2; i <= n; i++) 
     res *= i; 
    return res; 
    } 

    int sum1(int n) { 
    int s = 0; 
    for (int i = 1; i <= n; i++) 
     s += i; 
    return s; 
    } 

    double sum2(int n) { 
    double ts = 0.0; 
    for (int i = 1; i <= n; i++) { 
     ts = s/res; 
    } 
    return ts; 
    } 

    void main(int a) { 
    int d = sum2(a); 
    System.out.println(d); 
    } 

} 
+10

's'沒有在'sum2()'中聲明。 – timrau

+0

我不明白....可以ü請解釋 – thenewbie

+0

或者在sum2()中調用sum1(n)或聲明s爲全局變量 –

回答

3

聲明sres作爲類屬性,以及他們會從你的類的所有方法訪問,還必須更改主,並創建一個雙變量,因爲sum2()方法返回一個double。

public class SERIES { 
    // s and res are accessible in everywhere in SERIES class. 
    int s = 0; 
    int res = 1; 

    int factorial(int n) { 
     for (int i = 2; i <= n; i++) 
      res *= i; 
     return res; 
    } 

    int sum1(int n) { 
     for (int i = 1; i <= n; i++) 
      s += i; 
     return s; 
    } 

    double sum2(int n) { 
     double ts = 0.0; 
     for (int i = 1; i <= n; i++) { 
      ts = s/res; 
     } 
     return ts; 
    } 

    void main(int a) { 
     double d = sum2(a); // change to double 
     System.out.println(d); 
    } 

} 
+1

非常感謝你......這幫了很大忙。 – thenewbie

+0

但是當我給'a'爲1時,它給出了0.0,而它應該給出1 – thenewbie

+1

@thenewbie這是因爲在這個代碼中,s'被全局聲明爲0.零除以任何東西總是爲零。 – CubeJockey

1

因爲有在sum2方法沒有s。它在sum1方法中。在給定範圍內聲明的變量只存在於該範圍內。

因此,無論sum2需要創建這樣的變量:

double sum2(int n) 
{ 
    double s = 1.0; 
    double res = 1.0; 

    double ts = 0.0; 
    for(int i = 1;i<=n;i++) 
    { 
     ts = s/res; 
    } 
    return ts; 
} 

,或者它需要接受該變量作爲參數傳遞給該方法:

double sum2(int n, double s, double res) 
{ 
    double ts = 0.0; 
    for(int i = 1;i<=n;i++) 
    { 
     ts = s/res; 
    } 
    return ts; 
} 

(在這種情況下,其中要求的任何代碼sum2()將需要通過它那些值)

相反,您可以增加範圍。如果整個對象應該知道的s然後使它成爲一個類級變量:

public class SERIES { 
    double s = 1.0; 

    // now any method in this class can access the same instance of s 
} 
2

你應該清楚地瞭解局部和全局變量之間的區別。

基本上,你在{ }裏聲明的是一個局部變量。它只能在該塊內部訪問。因此,當功能double sum2(int n)你試圖訪問變量sres他們只是不知道該功能。