【问题标题】:Parsing a quadratic equation as a command line input将二次方程解析为命令行输入
【发布时间】: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


【解决方案1】:

您想使用正则表达式来解析命令行输入。 看来您尝试做的事情以前已经做过很多次了。

See here

【讨论】:

  • 嗨,Richard,如果之前已经做过很多次(并且您甚至链接到 SO 问题),请考虑将问题标记为重复,而不是添加指向重复的链接作为答案。特别是如果您自己的答案很短。现在,您的答案出现在“低质量”队列中,因此请记住这一点。
  • 我才真正涉足这里,所以我不确定我是否有权将其标记为重复。我会牢记在心。
  • 在我看来,这个人遇到的问题与二次方程无关,而是准确解析命令行输入。解决方案似乎是正则表达式。我将他们引导到一个有答案的地方,因为这似乎很有帮助。下次我会把它作为评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 2021-01-18
相关资源
最近更新 更多