1

构造函数似乎没有将值放入表达式变量中。如果是这样,它不会正确地将其传递给标记器。当我调试时,它似乎只是传递了构造函数中的行。我理解我编写的代码的方式是在 main() 中调用构造函数,字符串应存储在解析器内的表达式变量中,然后表达式应传递给 Tokenizer() 但表达式变量在传递时为空。在将字符串传递给 Tokenizer() 之前,我需要将字符串存储在表达式变量中。

public class Parser {
    String expression;
    Tokenizer tokenizer = new Tokenizer(expression);

    Parser(String e) {
        this.expression = e;
    }
}
 public static void main(String[] args) {
    // TODO code application logic here
    Parser parser = new Parser("3+5");
}
4

2 回答 2

5

在对象初始化期间,首先初始化字段。所以在田间

String expression;
Tokenizer tokenizer = new Tokenizer(expression);

expression作为参数传递给构造Tokenizer函数的值实际上是默认值null

您需要在正确/完全初始化Tokenizer后初始化字段,即。expression在你的类的构造函数中。

Parser(String e) {
    this.expression = e;
    this.tokenizer = new Tokenizer(expression /* or e */);
}
于 2013-10-01T01:25:49.490 回答
3

Tokenizer tokenizer = new Tokenizer(表达式); //这就是问题所在。

您正在使用 Null 表达式创建 Tokenizer

public class Parser {
    String expression;
    Tokenizer tokenizer =null;

    Parser(String e) {

        this.expression = e;
        tokenizer = new Tokenizer(expression);
    }
}
 public static void main(String[] args) {
    // TODO code application logic here
    Parser parser = new Parser("3+5");
}
于 2013-10-01T01:25:01.517 回答