在java中使用方法时出错

时间:2015-08-24 15:44:49

标签: java

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

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

我做了这么多。我想知道为什么我无法在s方法中使用sum2

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

}

3 个答案:

答案 0 :(得分:3)

sres声明为类属性,并且可以从类的所有方法访问它们,也必须更改main并创建一个double变量,因为sum2()方法返回一双。

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 :(得分:2)

您应该清楚地了解本地和全局变量之间的区别。

基本上,您在{ }内声明的是一个局部变量。它只能在该区域内进入。因此,当您在功能double sum2(int n)中尝试访问变量 s res 时,他们只是不知道功能

答案 2 :(得分:1)

因为s方法中没有sum2。它位于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
}