我遇到了范围问题,我不知道如何解决它。这是一个简单的程序来说明我的问题:
public class testing {
public static void main(String args[]) {
test(1,2);
System.out.println(answer);
}
public static int test(int x, int y) {
int answer = x + y;
return answer;
}
}
所以我将一些参数传递给测试方法并返回答案,所以我不能在主方法中访问答案的结果吗?但我不能,我得到一个错误。我究竟做错了什么? Java告诉我,我无法访问答案,即使我将return语句放在test方法中,范围也不会扩展到main方法。那么我怎么能回答答案(不作为参数传递)?
答案 0 :(得分:6)
您没有将return value
存储在任何变量中。此外,变量answer
在test
方法中定义为本地,并且在main
方法中不可见。因此,您的代码中会出现编译器错误。
您需要在主方法中使用此代码: -
int result = test(1,2);
System.out.println(result);
现在,这里发生的是,它将return value
test(1, 2)
存储在本地变量 result
中,与{{{无} answer
1}} test
方法中定义的变量。然后你只需打印result
。
此外,您可以将test
方法更改为: -
public static int test(int x, int y) {
// int answer = x + y; // No need to define a local variable.
return x + y;
}
并且您的主要方法可以修改为: -
public static void main(String[] args) {
System.out.println(test(1, 2));
}
请注意,这消除了声明局部变量的需要(在main
或test
方法中)。
答案 1 :(得分:3)
所以我将一些参数传递给测试方法并返回答案,所以我不能在主方法中访问答案的结果吗?
不,因为您没有在main
方法中声明它。它完全属于您的test
方法。你可以用不同的方法创建不同的answer
变量,它们都是完全分开的。
相反,您需要在调用时使用方法的返回值。例如:
int result = test(1, 2);
System.out.println(result);
这故意使用不同的变量名称来强调main
中变量与test
中变量的独立性,但它们可能具有相同的名称同样的结果。
或者根本不使用main
中的局部变量:
System.out.println(test(1, 2));
答案 2 :(得分:2)
试试这个
public static void main(String args[]) {
int answer = test(1,2);
System.out.println(answer);
}
答案 3 :(得分:1)
如果您希望打印需要写的答案值,答案范围仅在方法test()
内:
public static void main(String args[]) {
System.out.println(test(1,2));
}
答案 4 :(得分:0)
您需要捕获返回值:
public static void main(String args[]) {
int answer = test(1,2);
System.out.println(answer);
}
方法answer
中声明的局部变量test
在方法外部是不可见的。另一种方法是将answer
的声明移到类范围(在这种情况下test
根本不需要返回值):
public class testing {
static int answer;
public static void main(String args[]) {
test(1,2);
System.out.println(answer);
}
public static void test(int x, int y) {
answer = x + y;
}
}
答案 5 :(得分:0)
您正在调用方法并忽略结果:
public static void main(String args[]) {
test(1,2);
System.out.println(answer);
}
将其更改为:
public static void main(String args[]) {
int answer = test(1,2);
System.out.println(answer);
}
答案 6 :(得分:0)
answer
变量是静态test
方法中的本地变量。从外部看不到它,并且当您调用该方法时返回结果,但您没有将其保存在任何地方。
您应该做的是声明另一个存储结果的变量
int answer = test(1, 2)
答案 7 :(得分:0)
要回答您的第二个问题 - 如何在不返回参数的情况下使test
的结果可访问,您可以将answer
声明为私有实例字段(private static int answer;
)。然后它可以通过main方法访问,但不能在类之外访问。取决于应用程序是否比将其作为返回值传回更有用。我建议您熟悉关键字static
,private
,public
等,以了解方法,类和变量的不同组合。