2014-01-05 185 views
0

我是一個編程初學者,我在java中創建了一個計算器,但無法循環訪問字符的list2數組,然後轉換爲字符數據類型以通過getToken方法。有人能幫助我嗎?Java計算器 - 通過字符串數組循環字符

這是爲gettoken方法...

public Precedence getToken(char symbol) 
{ 
    switch (symbol) 
    { 
     case '(' : return Precedence.lparen; 
     case ')' : return Precedence.rparen; 
     case '+' : return Precedence.plus; 
     case '-' : return Precedence.minus; 
     case '/' : return Precedence.divide; 
     case '*' : return Precedence.times; 
     case '%' : return Precedence.mod; 
     case ' ' : return Precedence.eos; 
     default : return Precedence.operand; 
    } 
} 

這是後綴功能

/** Function to convert infix to postfix **/ 

public String postfix(String infix) 
{ 
    String postfix = ""; 
    top = 0; 
    String s = infix.replaceAll("\\s+", ""); 
    //int p = infix.length(); 
    stack = new Precedence[infix.length()]; 
    stack[0] = Precedence.eos; 
    String [] str = infix.split(" "); 
    List<String> list2 = Arrays.asList(str); 

    Precedence token; 

    if (s.matches("[-+/*0-9]+[-+/*0-9]")) 
    { 
     System.out.println("true"); 
    } 
    else 
    { 
     System.err.println("Invalid expression!"); 
    } 

    for (int i = 0; i < list2.size(); i++) 
    {  
     if (list2.get(i).matches("\\p{Punct}")) 
     { 
      token = getToken(list2.get(i)); 
     } 
    } 
+0

問題是什麼,究竟是什麼? – ahanin

+0

如何循環訪問list2數組,如果它是一個字符,然後將其轉換爲字符數據類型? – user3104303

+0

由於您正在驗證包含一個字符的字符串,因此您可以使用'list2.get(i).charAt(0)'獲取該字符,並將其傳遞給'getToken'方法。 – ahanin

回答

1

你的方法採取char參數

public Precedence getToken(char symbol) 

你試圖通過一個字符串

List<String> list2 = Arrays.asList(str); 
... 
token = getToken(list2.get(i)); 

編輯作爲@ahanin向我指出,該名單是一個完整的操作。在這種情況下,他的意見是正確的,你需要使用.charAt(0)

token = getToken(list2.get(i).charAt(0)); 
+0

然後該列表將不能包含參數,例如數字,大於9或負數。 – ahanin

+0

@ahanin我明白你在說什麼。我沒有意識到這個清單是一個完整的等式。 –