访问层次结构Java中的任何位置的变量

时间:2011-04-20 17:41:18

标签: java variables

我想从另一个方法访问方法内的变量集。我正在尝试访问方法Scanner中的sc inlet,但无法解析该变量。

public class LineReader extends MaxObject {

    public LineReader() {
        declareInlets(new int[]{DataTypes.INT,DataTypes.ALL});
        declareOutlets(new int[]{DataTypes.INT,DataTypes.ALL});
    }

    public void input(String Fold.sc, Atom[] args) {
        Scanner sc = new Scanner(new File());
        if (getInlet() == 1) {
            post("hello anything " + Fold.sc + " " + Atom.toOneString(args) + "!");
            outlet(1, s, args);
        } else {
            post("uh"); 
        }
    }

    public void inlet(int a) {
        for (int i = 0; i < startLine; i++) { 
            info = sc.readLine(); 
        }
        for (int i = startLine; i < endLine + 1; i++) {
            info = sc.readLine();
            System.out.println(info);
            post("hello integer " + a + "!");
            outlet(0, info);
        }       
    } 
}

3 个答案:

答案 0 :(得分:4)

您似乎无法理解variable scope。花一些时间了解它可能会让你受益。

由于您的变量sc是在方法input中声明的,因此只能在那里访问它。如果你想让它在整个班级都可以访问,你应该让它成为班级的一员。

这是一个如何运作的例子:

public class MyClass {
    int x = 3;

    public void method1() {
        int a = 1;
    }

    public void method2() {
        System.out.println(a); //will not work - a is not in scope
        System.out.println(x); //will work - x is accessible from all methods
    }
}

答案 1 :(得分:0)

声明扫描仪SC在输入功能的一侧,

public class LineReader extends MaxObject {
Scanner sc;
public LineReader() {
declareInlets(new int[]{DataTypes.INT,DataTypes.ALL});
declareOutlets(new int[]{DataTypes.INT,DataTypes.ALL});
}
public void input(String Fold.sc, Atom[] args) {
    sc = new Scanner(new File());
        if (getInlet() == 1){
        post("hello anything " + Fold.sc + " " + Atom.toOneString(args) + "!");
        outlet(1, s, args);
    } else
        post("uh"); 
}
public void inlet(int a) {

for (int i = 0; i < startLine; i++) { info = sc.readLine(); }
for (int i = startLine; i < endLine + 1; i++) {
info = sc.readLine();
System.out.println(info);
post("hello integer " + a + "!");
outlet(0, info);
        }       
    }
}

答案 2 :(得分:0)

您的扫描仪实例是输入法的本地实例。您需要将实例传递给入口方法才能在那里使用它。

public void input(String Fold.sc, Atom[] args) {
 ...
    Scanner sc = new Scanner(new File());
 ... 
}
public void inlet(int a, Scanner sc) {
...
    for (int i = 0; i < startLine; i++) { info = sc.readLine(); }
...
}