2015-02-11 55 views
2

目標是創建一個程序,該程序採用二次方程形式的二次方程並求解。除了StringTokenizer之外,還有其他方法可以實現嗎?或者是否有可能在StringTokenizer中僅分離出^ 2,而不是像現在這樣在^和2中分離出來?我意識到,使用我寫的方式,它不會允許方程使用2。將二次方程解析爲命令行輸入

這個問題要求我不要採取個別係數,而是整個方程本身。

樣品運行:「java SolveEquation21.5625x∧2+ 2.5x + 1 = 0」。對於此輸入,輸出應爲:「x = -0.8」

import java.util.Scanner; 
import java.util.StringTokenizer; 
class SolveEquation2 { 
    public static void main(String args[]){ 
     Scanner scan = new Scanner(System.in); 
     System.out.print("Input a quadratic"); 
     String equation = scan.nextLine(); 

     StringTokenizer st = new StringTokenizer(equation, "x^2+-"); 



     String a,b,c; 

     a = st.nextToken(); 
     b = st.nextToken(); 
     c = st.nextToken(); 

     double a1 = Double.parseDouble(a); 
     double b1 = Double.parseDouble(b); 
     double c1 = Double.parseDouble(c); 


     double x = (b1 * b1) - (4 * a1 * c1); 

     double var1 = (-b1 + Math.sqrt(x))/(2*a1); 
     double var2 = (-b1 - Math.sqrt(x))/(2*a1); 

     if (x == 0){ 
      System.out.println("x = " + var1); 

     } 
     if (x > 0){ 
      System.out.println("x1 = " + var1); 
      System.out.println("x2 = " + var2); 
     } 
     if (x < 0){ 
      System.out.println("No Solution"); 


    } 
    } 
} 
+1

您是否必須使用此輸入格式?如果您在單獨掃描中收集係數,將會更容易IMO – ControlAltDel 2015-02-11 16:10:39

+0

您可以將整個公式作爲字符串,然後使用任何+/-符號分割字符串。參見javadoc中的String.split(regex)''。另外,如@ControlAltDel所建議的,分開掃描(即nextDouble,nextFloat等),除非您有這樣的要求。 – ha9u63ar 2015-02-11 16:12:45

+1

與您的問題沒有直接關係,但如果判別式爲負,該怎麼辦?而如果a1是0呢?考慮處理這些。 – 2015-02-11 16:12:59

回答

2

您希望使用正則表達式來解析命令行輸入。 看來,你想要做的事已經做過很多次了。

See here

+0

嗨,理查德,如果之前已經做了很多次(甚至連接到SO問題),請考慮將問題標記爲重複,而不是將副本鏈接添加爲答案。特別是如果你自己的答案如此之短。現在,您的答案出現在「低質量」隊列中,因此請記住未來。 – 2015-02-11 17:46:14

+0

我只是真的參與到這裏,所以我不確定我有權標記爲重複。我將銘記未來。 – Richard 2015-02-11 17:51:43

+0

在我看來,這個人遇到的問題與二次方程無關,而是準確地解析命令行輸入。解決方案似乎是正則表達式。我指示他們到一個有答案的地方,因爲這看起來很有幫助。下一次我會以評論的形式來做。 – Richard 2015-02-11 23:48:03