2015-04-19 122 views
-2

我爲我的android開發了一個java程序,它用一個變量求解線性方程。例如,讓我們考慮字符串:線性方程求解器 - 在Java中獲取無效輸出

String st1 = "4x-2+2x=8"; 

如果我給上面的字符串作爲輸入或任何一個變量的線性方程,我得到了被錯誤和沒有結果。

equation = Onevariable(st1); 

我想了很多,我沒有這個程序解決問題:

public static String Onevariable (String eqn) 
{ 
    float ans = 0; 
    float coeffSum = 0; 
    float constSum = 0; 
    float coeffx[] = new float[100]; 
    float[] constant = new float[100]; 
    // System.out.println(eqn); 
    for (int i = 0, j = 0, k = 0; i < eqn.length() - 1;) 
    { 
     if (eqn.charAt(i + 1) == 'x' && i < eqn.indexOf("=")) 
     { 
      if (i != 0 && eqn.charAt(i - 1) == '-') 
      { 
       String x = eqn.substring(i, i + 1); 
       if (x != "+" && x != "-") 
       { 
        int n = -(Integer.parseInt(x, 10)); 
        coeffx[j++] = n; 
    } 
      } else 

      { 
       String x = eqn.substring(i, i + 1); 

       if (x != "+" && x != "-") 

       { 
        int n = Integer.parseInt(x, 10); 

        coeffx[j++] = n; 
       } 
      } 

      i += 3; 
     } 
     if (eqn.charAt(i + 1) == 'x' && i > eqn.indexOf("=")) 
     { 
      if (eqn.charAt(i - 1) == '-') 
      { 
       String x = eqn.substring(i, i + 1); 
       if (x != "+" && x != "-") 
       { 
        int n = Integer.parseInt(x, 10); 
        coeffx[j++] = n; 
       } 
      } else 
      { 
       String x = eqn.substring(i, i + 1); 
       if (x != "+" && x != "-") 
       { 
        int n = -(Integer.parseInt(x, 10)); 
        coeffx[j++] = n; 
       } 
      } 
      i += 3; 
     } 
     if (eqn.charAt(i + 1) != 'x' && i < eqn.indexOf("=")) 
     { 
      if (eqn.charAt(i - 1) == '-') 
      { 
       String x = eqn.substring(i, i + 1); 
       if (x != "+" && x != "-") 
       { 
        int n = -(Integer.parseInt(x, 10)); 
        constant[k++] = n; 
       } 
      } else 
      { 
       String x = eqn.substring(i, i + 1); 
       if (x != "+" && x != "-") 
       { 
        int n = Integer.parseInt(x, 10); 
        constant[k++] = n; 
       } 
      } 
      i += 2; 
     } 
     if (eqn.charAt(i + 1) != 'x' && i > eqn.indexOf("=")) 
     { 
      if (eqn.charAt(i - 1) == '-') 
      { 
       String x = eqn.substring(i, i + 1); 
       if (x != "+" && x != "-") 
       { 
        int n = Integer.parseInt(x, 10); 
        constant[k++] = n; 
       } 
      } else 
      { 
       String x = eqn.substring(i, i + 1); 
       if (x != "+" && x != "-") 
       { 
        int n = -(Integer.parseInt(x, 10)); 
        constant[k++] = n; 
       } 
      } 
      i += 2; 
     } 
    } 
    for (int i = 0; i < coeffx.length; i++) 
     coeffSum += coeffx[i]; 
    for (int i = 0; i < constant.length; i++) 
     constSum += constant[i]; 
    ans = constSum/coeffSum; 
    //System.out.println("Value of x = " + (-ans)); 
    String s = Float.toString(-ans); 
    return s; 
} 
+1

你應該使用正則表達式或其他東西來標記輸入,這是非常不可讀的。 – Bubletan

+0

didn,t讓你先生。正則表達式如何使用。 –

+0

是否有任何可能t0讀取輸入字符串 –

回答

0

你應該清楚地分開操作解析。這不是一個好設計。

正則表達式不是這樣做的。它更像是一個詞法分析器,一個ANTLR。

此問題已解決。看看像這樣的Java符號數學求解器庫,如these