2013-04-25 90 views
0

我知道如何計算沒有變量的簡單表達式。但是怎麼辦,如果符合我們用「x」表達的話? 例如如何計算算術表達式(String)並返回答案?

(x+1)*(x-1) 

在這個示例程序應該返回:X^2 - 1

+0

是possible.I想是不是possiblem – PSR 2013-04-25 11:52:02

+0

我會說這是可能的,但它會涉及編碼 – Apurv 2013-04-25 11:54:40

+0

您頗多」需要將該字符串編譯爲代碼。看[這] [1]。 [1]:http://stackoverflow.com/questions/935175/convert-string-to-code – 2013-04-25 11:55:17

回答

4

這是一個不平凡的努力。我強烈建議你看看有什麼。例如Symja

0

你在問什麼,是讓程序轉換(並可能解決)數學方程。這當然是可能的,並且有圍繞它的工具和肯定的API,但它絕對超越了你自己的Java程序的黑客攻擊。

如果你只是想計算給定公式的結果,那麼這是可行的。有趣的是,你可以在Google上投一個等式(例如(5 + 3)*(8-4)),它會給你結果。那麼,爲什麼不使用它呢? ;-)

-1

當我們去面試時,他們問這個邏輯類型的問題。我遇到了同樣的問題。但由於這類問題,我無法成功面試。後來我在互聯網上搜索後發現了我自己的結果。朋友們都希望這樣做。

請按照此操作。我會給這充滿自由。

我將輸入方程作爲字符串像。

a * b * c + d/m-x。

得到這個方程作爲字符串對象。並使用以下功能:#

public void calc() throws IOException 
{ 
    String equation,store,get; 

    StringBuilder sb= new StringBuilder(); 
    DataInputStream dis= new DataInputStream(System.in); 
    System.out.println("Enter the equation"); 
    equation= dis.readLine(); 
    equation="%"+equation+"%"; 
    byte[] buf= equation.getBytes(); 
    for(int i=0;i<equation.length();i++) 
    { 
     if(buf[i]>=97&&buf[i]<=122) 
     { 
      System.out.println("Enter the value for "+(char)buf[i]); 
      get=dis.readLine(); 
      sb.append(get); 
     } 
     else 
      sb.append((char)buf[i]); 
    } 
    store= sb.toString(); 

    char[] buf1= new char[25]; 

    for(int i=0;i<store.length();i++) 
    { 
     buf1[i]=store.charAt(i);   
    } 
    for(int i=0;i<buf1.length;i++) 
    { 
     no.append(buf1[i]); 
    } 
    System.out.println(no.toString()); 
    int m,n=0; 
    for(int i=0;i<no.length()-1;i++) 
    { 
     if('/'==no.charAt(i)) 
     { 
      leftCount=rightCount=0; 
      m=findLeftValue(i-1)/findRightValue(i+1); 
      no.replace(i-leftCount, i+rightCount+1, String.valueOf(m)); 
      i=0; 
     }   
    } 


    for(int i=0;i<no.length()-1;i++) 
    { 
     if('*'==no.charAt(i)) 
     { 
      leftCount=rightCount=0; 
      m=findLeftValue(i-1) * findRightValue(i+1); 
      no.replace(i-leftCount, i+rightCount+1, String.valueOf(m)); 
      i=0; 
     }   
    } 
    for(int i=0;i<no.length()-1;i++) 
    { 
     if('+'==no.charAt(i)) 
     { 
      leftCount=rightCount=0; 
      m=findLeftValue(i-1) + findRightValue(i+1); 
      no.replace(i-leftCount, i+rightCount+1, String.valueOf(m)); 
      i=0; 
     }   
    } 
    for(int i=0;i<no.length()-1;i++) 
    { 
     if('-'==no.charAt(i)) 
     { 
      leftCount=rightCount=0; 
      m=findLeftValue(i-1) - findRightValue(i+1); 
      no.replace(i-leftCount, i+rightCount+1, String.valueOf(m)); 
      i=0;     
     }   
    } 
    for(int i=0;i<no.length();i++) 
    { 
     if('%'==no.charAt(i)) 
     { 
      no.deleteCharAt(i); 
      i=0; 
     } 
    } 
    System.out.println(no.toString()); 



} 
public int findLeftValue(int i) 
{ 
    StringBuilder sb= new StringBuilder(); 
    int x=0; 
    while(no.charAt(i)!='*'&&no.charAt(i)!='+'&&no.charAt(i)!='-'&&no.charAt(i)!='/' &&no.charAt(i)!='%') 
    { 
      leftCount++; 
      sb.insert(0, no.charAt(i)); 
      i--; 
    }   
    x=Integer.parseInt(sb.toString()); 
    return x; 
} 
public int findRightValue(int i) 
{ 
    StringBuilder sb= new StringBuilder(); 
    int x;    
    while(no.charAt(i)!='*'&&no.charAt(i)!='+'&&no.charAt(i)!='-'&&no.charAt(i)!='/' &&no.charAt(i)!='%') 
    {   
     rightCount++; 
     sb.append(no.charAt(i));    
     i++; 
    }  
    x=Integer.parseInt(sb.toString()); 
    return x; 
}   

這裏可能是未使用的變量可能是there.please找到並刪除它。 我沒有對計算設置任何偏好。只是我補充了流量。如果你改變流程,答案將會不同。所以,請記住。你也可以爲不同的操作員做同樣的事情。 還有一件事是,請在繼續功能之前驗證方程式。因爲它不會檢查方程是正確還是錯誤。(a + * d ++ c)。這是不正確的方程式。 該公式應該是正確的格式。像a + b * c-d/x。

享受..Break採訪中,讓你的正確的工作..

+0

使用它friends..congralations .. – Noorul 2014-07-26 09:11:52