2013-10-26 31 views
-1
public static void main(String args[]) 
{ 
    LinkedHashMap<String,Integer> map = new LinkedHashMap<String,Integer>(); 
    Scanner scan = new Scanner(System.in); 

    while(scan.hasNextLine()) 
    { 
     String line = scan.nextLine(); 
     String[] tokens = line.split(" "); 

     if(!Character.isDigit(tokens[0].charAt(0)) && !line.equals("clear") && !line.equals("var")) 
     { 
      int value = 0; 
      for(int i=0; i<tokens.length; i++) 
      { 
       if(tokens[i].charAt(0) == '+') 
       { 
        addition(tokens, value); 
        break; 
       } 

       else if(i==tokens.length-1) 
       { 
        System.out.println("No operation"); 
        break; 
       } 
      } 
      map.put(tokens[0], value); 
      System.out.println(map); 
     }  

     if(line.equals("clear")) 
     { 
      clear(map); 
     } 
     if(line.equals("var")) 
     { 
      variableList(map); 
     }  
    } 
} 

public static int addition(String[] a, int b) 
{ 
    for(int j=0; j<a.length; j++) 
    { 
     if(Character.isDigit(a[j].charAt(0))) 
     { 
      int add = Integer.parseInt(a[j]); 
      b = b + add; 
     } 
    } 
    return b; 
} 

我在主要方法中使用了所有這些,但我想分離它以使其更清潔。我一定犯了錯誤,因爲現在加法方法甚至不能正常工作。例如,A = 5 + 6應該打印地圖{A = 11}我的方法有什麼問題?添加不起作用,總是打印0

+0

你的方法做什麼?它會返回什麼嗎? Java是通過價值傳遞的。 –

+0

它應該將一條線分成標記,掃描標記以查找標記(+, - ,/,*),然後根據標記對數字進行操作。 a = 5 + 6將被分成5個令牌,當它找到+時,它運行加法方法。添加方法應該返回值b。 – user2770254

+0

你對返回值做了什麼? –

回答

3

這就是問題所在:

addition(tokens, value); 

你調用的方法,但是忽略返回值。在調用非void方法時,應該始終保持警惕,但忽略返回值。我懷疑你想:

value = addition(tokens, value); 

(還有其他各種文體改變了我會想辦法讓 - 可能開始改變環路在addition使用加強for循環:for (String item : a)等,但至少應該讓你開始...)

+0

如果我使用增強for循環,你將如何掃描字符? – user2770254

+1

@ user2770254:你現在用同樣的方法 - 在你的「加法」方法中,你一次只處理一個字符串,不是嗎?只需將'a [j]'與'item'一起更改... –

相關問題