2012-11-05 62 views
2

即時通訊嘗試編寫循環方法,通過相同的方法。應該循環的次數取決於用戶輸入的字符串的長度。例如,如果字符串是1 + 2-3/4 * 3 + 2。該程序應該存儲前3個數字和前2個運算符。然後做操作的順序,因爲這個將是1 + 2-3 = 3-3。那麼它應該得到下一個運算符和字符串中的下一個數字。這是我迄今爲止的循環,它不是循環,雖然整個字符串,並用新的號碼和運營商循環方法

public static double solveExpresion(String e) { 
    double answer = 0; 

    for (int i = 0; i < e.length(); i++) { 
     String operand1; 
     String operand2; 
     String operand3; 

     operand1 = getOperand(e); 
     o1 = Double.parseDouble(operand1); 

     operator1 = getOperator(expression); 

     operand2 = getOperand(expression); 
     o2 = Double.parseDouble(operand2); 

     operator2 = getOperator(expression); 

     operand3 = getOperand(expression); 
     o3 = Double.parseDouble(operand3); 

     answer = orderOfOperation(operator1, operator2); 

    /* operator2 = getOperator(expression); 

     operand3 = getOperand(expression); 
     o3 = Double.parseDouble(operand3); 

     answer = orderOfOperation(operator1, operator2);*/ 
    } 

    return (answer); 
} 

注更新它:我不允許使用任何類型的陣列。

這是我getOperand和getOperator方法

public static String getOperand(String s) { 
    s = s.trim(); 
    String num = ""; 

    while (s.length() > 0 && s.charAt(0) >= '0' && s.charAt(0) <= '9') { 

     num = num + s.charAt(0); 
     s = s.substring(1); 

    } 
    expression = s; 

    return (num); 
} 

public static char getOperator(String s) { 

    char r = 0; 

    if (s.length() > 0) { 

     r = s.charAt(0); 
     s = s.substring(1); 

    } 

    expression = s; 
    return (r); 
} 
+0

我們可以看到你的'getOperand'和'getOperator'方法嗎? –

+1

'然後做操作的順序,因爲這個將是1 + 2-3 = 3-3'我沒有明白你的意思。通常將「1 + 2-3/4 * 3 + 2」評估爲「1 + 2 - ((3/4)* 3)+ 2」。您使用的是什麼「操作順序」的定義?你爲什麼只看前三個數字? –

+0

@MarkByers - 我的猜測是OP的任務是評估所有運營商的優先級相同,並從左向右進行評估。 –

回答

3

您的邏輯是不完整的。下面是我會怎麼做您的問題大綱(在僞代碼):

double answer = getOperand(e); 
while (not at end) { 
    String operator = getOperator(e); 
    double operand2 = getOperand(e); 
    answer = orderOfOperation(answer, operator, operand2); 
} 
return answer; 

這與不斷的下一個操作員/操作數更新answer。你想這樣做的原因是,當你評估了一部分表達式(比如「1 + 2」)後,字符串中的下一個東西(如果有的話)是一個操作符和下一個操作數。沒有左操作數可讀;相反,你應該使用迄今爲止的答案。

還要注意,爲了使循環正常工作,第一個操作數必須已經被使用(並且分配給answer)。

請注意,您當前的(not at end)測試假定每個運算符和操作數都只有一個字符長。當其中一個操作數大於9時,這不會很好。

+0

好.. thanx我會試試這個 –