无法访问另一个方法中的结果

时间:2013-01-29 15:26:35

标签: java scope

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

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方法。那么我怎么能回答答案(不作为参数传递)?

8 个答案:

答案 0 :(得分:6)

您没有将return value存储在任何变量中。此外,变量answertest方法中定义为本地,并且在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));
}

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

答案 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方法访问,但不能在类之外访问。取决于应用程序是否比将其作为返回值传回更有用。我建议您熟悉关键字staticprivatepublic等,以了解方法,类和变量的不同组合。