2014-03-30 80 views
0

我有一元運算符的算術表達式(字符串),我想把每個元素放入一個數組中。例如:-3 + 4.2 * 5 ==>輸出應該是:-3,+,4.2,*,5(非 - ,3,+,4.2,*,5) 3 + -5 ==>輸出應該(3,/,(,5, - ,8,)爲:3,+, - 5(與一元運算符) (3 /(5-8)+18)2 ==> ,+,18),,2如何使用一元運算符輸出算術表達式?

這是我到目前爲止的代碼,輸出是3,+, - ,5,它沒有把一元運算符放在數字的前面。

我的問題是如何正確地將每個元素放入數組中。

 public class Test2 { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    System.out.println("Input:"); 
    Scanner in = new Scanner(System.in); 
    String input = in.nextLine(); 
    String[] arr1= splitInfixExpression(input); 
    for(int i=0;i<arr1.length;i++) 
    { 
     System.out.println(arr1[i]); 
    } 

    } 
    priva te static boolean isOperandChar(final char c) { 
    return Character.isDigit(c) || c == '.'; 
    } 
    private static boolean isParenthesis(final char c) { 
return c=='('||c==')'; 
} 




    private static String[] splitInfixExpression(final String input) { 
    final List<String> postfixExpression = new ArrayList<>(); 
    boolean encounteredOperandStart = false; 
    String currentOperand = ""; 
    for (final char c : input.toCharArray()) { 
     if (encounteredOperandStart) { 
      if (isOperandChar(c)) { 
       currentOperand += c; 
      } 


       postfixExpression.add(currentOperand); 
       postfixExpression.add(String.valueOf(c)); 
       currentOperand = ""; 
       encounteredOperandStart = false; 

     } else { 
      if (isOperandChar(c)) { 
       encounteredOperandStart = true; 
       currentOperand += c; 
      } 

      else if(isParenthesis(c)) { 
      postfixExpression.add(String.valueOf(c)); 
      //currentOperand = ""; 
      encounteredOperandStart=false; 
     } 
      else{ 
      postfixExpression.add(String.valueOf(c)); 
      //currentOperand = ""; 
      encounteredOperandStart=false; 
     }     

     } 
    } 
    if (!currentOperand.isEmpty()) { 
     postfixExpression.add(currentOperand); 
    } 
    return postfixExpression.toArray(new String[postfixExpression.size()]); 
}} 
+2

這是一個相當激烈的邏輯問題。說實話,我甚至不想嘗試它。我會使用正則表達式。 – aliteralmind

+0

也見http://stackoverflow.com/questions/3422673/evaluating-a-math-expression-given-in-string-form – aliteralmind

+0

aliteralmind,這不是我的專題評估問題,它是如何把一個字符串數組。 – Sophie

回答

0

我想這是你想要的嗎? :)

public static List<String> splitInfixExpression(String someString){ 
    List<String> someList = new ArrayList<String>(); 
    String tempString = ""; 
    for (int i = 0; i < someString.length(); i++){ 
     if (Character.isDigit(someString.charAt(i)) || (someString.charAt(i) == '-' && someString.length() == 0) || someString.charAt(i) == '.'){ 
      tempString += String.valueOf(someString.charAt(i)); 
      tempString = tempString.trim(); 
     } 
     else{ 
      if (tempString.length() > 0){ 
       someList.add(tempString); 
      } 
      tempString = String.valueOf(someString.charAt(i)); 
      if (someList.size() > 0 && Character.isDigit(someList.get(someList.size() - 1).charAt(someList.get(someList.size() - 1).length() - 1))){ 
       someList.add(tempString); 
       tempString = ""; 
      } 
      else if (tempString.trim().length() > 0 && ((!tempString.equals("-"))) && ((!tempString.equals("+")))){ 
       someList.add(tempString); 
       tempString = ""; 
      } 
     } 
    } 
    someList.add(tempString); 

    return someList; 
} 
+0

你能舉一些例子輸入和輸出嗎?我有興趣用'(3 /(5--8)+18)2'來看它(5減8)。 – aliteralmind

+0

它沒有。沒有括號,沒有運營商優先。 – EJP

+0

這隻適用於-3 + 4,3 + -4,但對於3- + 4,它不起作用,謝謝StephenB – Sophie