0

我的范围有问题,我不知道如何解决。这是一个简单的程序来说明我的问题:

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 语句放在测试方法中,范围也不会扩展到 main 方法。那么我还能如何返回答案(不将其作为参数传递)?

4

8 回答 8

6

您没有将 存储return value在任何变量中。此外,该变量在方法中本地answer定义,并且在方法中不可见。因此,您的代码中会出现编译器错误testmain

您需要在 main 方法中包含此代码:-

int result = test(1,2);
System.out.println(result);

现在,这里发生的是,它将return valueof存储test(1, 2)在一个局部变量 中,这与方法中定义result的变量无关。然后你只需打印背面。answertestresult

此外,您可以将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));
}

请注意,这消除了声明局部变量(在maintest方法中)的需要。

于 2013-01-29T15:28:08.027 回答
3

所以我将几个参数传递给测试方法并返回答案,所以我不应该能够在我的主要方法中访问答案的结果吗?

不,因为您没有在main方法中声明它。对于您的方法来说,它完全是本地的test。你可以用不同的方法创建无数不同answer的变量,它们都是完全独立的。

相反,您需要在调用该方法时使用该方法的返回值。例如:

int result = test(1, 2);
System.out.println(result);

这故意使用不同的变量名称来强调变量 inmain与in 的独立性test,但它们可以具有相同的名称,结果完全相同。

或者根本不使用局部变量main

System.out.println(test(1, 2));
于 2013-01-29T15:28:42.343 回答
2

试试这个

public static void main(String args[]) {
    int answer = test(1,2);
    System.out.println(answer);
}
于 2013-01-29T15:31:48.447 回答
1

test()如果您希望打印您需要编写的答案值,则答案的范围仅在方法内:

public static void main(String args[]) {
System.out.println(test(1,2));

}

于 2013-01-29T15:29:35.933 回答
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;
    }
}
于 2013-01-29T15:28:25.227 回答
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);
}
于 2013-01-29T15:28:57.130 回答
0

answer变量是静态test方法中的局部变量。它从外部不可见,并且在您调用该方法时作为结果返回,但您没有将其保存在任何地方。

你应该做的是声明另一个变量来存储你的结果

int answer = test(1, 2)

于 2013-01-29T15:29:33.530 回答
0

要回答您的第二个问题 - 如何在test不返回参数的情况下使结果可访问,您可以声明answer为私有实例字段 ( private static int answer;)。然后它将可以通过 main 方法访问,但不能在类之外访问。取决于应用程序这是否比将其作为返回值传回更有用。我建议您熟悉关键字static、等privatepublic以了解方法、类和变量的不同组合。

于 2013-01-29T15:48:41.430 回答