2013-01-25 47 views
2

我一直在建立一個簡單的公式計算器,並加入了加法和減法。正如你應該知道的那樣,當計算一個方程時,你遵循優先的算術規則,即括號,命令:冪函數,除法,乘法,加減。問題在於加法和減法具有相同的優先級,因此您可以從左到右閱讀它。這是我到目前爲止的代碼:加減BODMAS系統

{ 
ArrayList<String> equation = java.util.Arrays.asList({"2","-","2","+","5"}); 

    while(equation.contains("+")){ 
      addMe(equation); 
    } 
    while(equation.contains("-")){ 
      minusMe(equation);    
    } 
} 

public static void addMe(ArrayList<String> numberList){ 
for (int i = 0, n = numberList.size(); i < n; i++) { 
    String value = (String) numberList.get(i); 
    if(value.equals("+")){ 

    String wordBefore = (String) numberList.get(i-1); 
    String wordAfter = (String) numberList.get(i+1); 
    System.out.println("This is the word before " + wordBefore); 
    System.out.println("This is the word after " + wordAfter); 
    double doubleFromBefore = Double.parseDouble(wordBefore); 
    double doubleFromAfter = Double.parseDouble(wordAfter); 
    double answer = doubleFromBefore + doubleFromAfter; 
    System.out.println("This is the answer: " + answer); 
    String stringAnswer = String.valueOf(answer); 
    String newNum2 = value.replace(value, stringAnswer); 
    numberList.set(i,newNum2); 
    numberList.remove(i-1); 
    numberList.remove(i); 
    break; 
    } 
} 
} 

的minusMe方法是完全一樣的方法ADDME除了以「 - 」相關的地方。我遇到的問題是一次讀取從左到右的一個項目的方程式,並執行加法或減法方法。理想情況下,我認爲我需要將我的2個while循環與迭代器結合使用來解決問題,但是我的嘗試沒有奏效。任何想法,如果這將解決我的問題?如果是這樣,請提供修正循環。

問候

回答

3

看一看這個

java.uti.ArrayList<String> equation = java.util.Arrays.asList({"2","-","2","+","5"}); 
java.util.Iterator<String> equIterator = equation.iterator(); 
int result = 0; 
int multiplier = 1; 
while(equIterator.hasNext()){ 
    String operandOrOperator = equIterator.next(); 
    if(operandOrOperator.equals("+")){ 
      multiplier=1; 
    }else if(operandOrOperator.equals("-")){ 
      multiplier=-1; 
    }else if(operandOrOperator.equals("*")){ 
      result*=Integer.parseInt(equIterator.next()); // Assuming that next element will be there always after operator. 
    }else{ 
      result+=(multiplier * Integer.parseInt(operandOrOperator)); 
    } 
} 
System.out.println("Final result : " + result); 
+0

工程,但我怎麼會這樣做乘法?如果這是很多工作,不要打擾,因爲這到目前爲止與我的代碼一起工作。只是在等待另一個問題的答覆,看看這是否也適用於此。 – Digitalwolf

+0

編輯答案。一探究竟。 –

+0

這根本不處理除法,模數或冪運算,也沒有正確實現運算符優先級。考慮例如1 + 2 * 3。 Downvote。 – EJP

0

你正在做的這一切都錯了。您至少需要使用遞歸下降表達式解析器,或者Dijkstra的分流碼算法,甚至可以使用解析器生成器(如果這種算法要發展成某種語言的話)。你會通過網絡搜索找到所有這些東西。

+0

謝謝。急於研究它,只需要一些基本的東西,使我的程序能夠實現所需的輸出。將在運行時進行改造 – Digitalwolf