2013-10-01 23 views
1

構造函數似乎沒有將值放入表達式變量中。如果是這樣,它不會正確傳遞給標記器。當我調試它似乎只是傳遞構造函數內的行。我理解我寫的代碼的方式是在main()中調用的構造函數將字符串存儲在解析器中的表達式變量中,然後將表達式傳遞給Tokenizer(),但表達式變量在傳遞時爲null。在傳遞給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"); 
} 

回答

3

Tokenizer tokenizer = new Tokenizer(expression); //這裏是問題。

你用空表達

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"); 
} 
+0

不要害怕將表達式傳遞給標記器,字符串是不可變的:-) – porfiriopartida

5

創建標記生成器期間的對象的初始化,字段首先被初始化。所以在田裏

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

expression作爲參數傳遞給Tokenizer構造函數傳遞的值實際上是默認值null

expression已被正確/完全初始化後,您需要初始化Tokenizer字段,即。在你的類的構造函數中。

Parser(String e) { 
    this.expression = e; 
    this.tokenizer = new Tokenizer(expression /* or e */); 
} 
相關問題