我仍然是在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);
}
}
答案 0 :(得分:3)
将s
和res
声明为类属性,并且可以从类的所有方法访问它们,也必须更改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
}