Доступ к переменным в любом месте иерархии Java - PullRequest
0 голосов
/ 20 апреля 2011

Я хочу получить доступ к переменной, установленной внутри метода, из другого метода. Я пытаюсь получить доступ к 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 ]

4 голосов
/ 20 апреля 2011

Похоже, у вас проблемы с пониманием переменная область действия .Возможно, вам было бы полезно потратить некоторое время на изучение этого.

Поскольку ваша переменная 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
    }
}
0 голосов
/ 20 апреля 2011

Ваш экземпляр сканера является локальным для метода ввода.Вам нужно передать экземпляр методу inlet, чтобы иметь возможность использовать его там.

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(); }
...
}
0 голосов
/ 20 апреля 2011

Объявить сканер 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);
        }       
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...