2015-02-11 56 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