【发布时间】:2015-02-12 01:07:37
【问题描述】:
目标是创建一个程序,该程序采用二次形式的二次方程并求解它。除了 StringTokenizer 之外,还有其他方法可以做到这一点吗?或者是否可以在 StringTokenizer 中仅隔离 ^2 而不是像现在那样隔离 ^ 和 2?我意识到使用我编写它的方式,它根本不允许方程式使用 2。
这个问题要求我不要取单个系数,而是取整个方程本身。
示例运行:“java SolveEquation2 1.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");
}
}
}
【问题讨论】:
-
你必须使用这种输入格式吗?如果您在单独的扫描中收集系数,IMO 会更容易
-
您可以将整个方程式作为一个字符串,然后使用任何 +/- 符号拆分该字符串。请参阅 javadoc 中的 String.split(regex)`。同样正如@ControlAltDel 建议的那样,单独扫描(即nextDouble、nextFloat 等),除非您需要这样做。
-
与您的问题没有直接关系,但是如果判别式是否定的怎么办?如果 a1 是 0 怎么办?考虑处理这些。
-
@AkashPradhan 您是否想建议虚数会发生什么?
-
@ControlAltDel:我写了一个收集系数的代码,但是这个问题指定我们必须将一个二次方程作为一个整体并输出解决方案。
标签: java command-line-arguments