当前位置: 首页 > 知识库问答 >
问题:

Java从二次方程中提取系数的程序

刘英彦
2023-03-14

问题:Java程序将系数从二次方程中分离出来,例如,如果输入字符串为:

String str1;
str1 = "4x2-4x-42=0"

所以我需要从给定的输入字符串中分离系数,并得到输出

a = 4 b = -4 c = -42

我试过这个:

String equation = "ax2+bx-c=0";
String[] parts = equation.split("\\+|-|=");
for (int i = 0; i < parts.length - 2; i++) {
    String part = parts[i].toLowerCase();
    System.out.println(part.substring(0, part.indexOf("x")));
}
System.out.println(parts[2]);

但是我得到的输出是23x2、4x和4。实际需要的输出是23 ,- 4 , 4

共有3个答案

荆树
2023-03-14

第一个注意事项:如果在regexp中使用符号作为分隔符,那么在slpitted元素中就会丢失它。我建议您使用以下regexp:

"x2|x|="

然后,你只能得到数字。完整的代码片段是:

public class Main {
    private static final char[] varNames = {'a', 'b', 'c'};

    public static void main(String[] args) {
        String equation = "4x2-4x-42=0";
        String[] parts = equation.split("x2|x|=");
// you will get 4 elements, but the last element is always 0
        for(int i=0; i<parts.length - 1; i++){
            System.out.println(varNames[i] + " = " + Integer.parseInt(parts[i]));
        }
    }
}

但在本例中,输出中将包含“”符号。为了避免这种情况,可以使用Integer。parseInt(parts[i])而不是parts[i]

越学文
2023-03-14

如果只使用二次函数:

int xsqrd = equation.indexOf("x2");
int x = equation.indexOf("x", xsqrd);
int equ = equation.indexOf("=");
String a = equation.subString(0,xsqrd);
String b = equation.subString(xsqrd+1,x);
String c = equation.subString(x,equ);

我可能把子串搞砸了,但你明白了。

羊浩广
2023-03-14

使用Regex,以下模式将起作用:

([+-]?\d+)[Xx]2\s*([+-]?\d+)[Xx]\s*([+-]?\d+)\s*=\s*0

这将匹配二次曲线并提取参数,让我们了解它是如何工作的:

  • (…) 这是捕获组

所以

  • ([-]?\d)匹配“a”参数
  • [Xx]2匹配“X2”或“X2”
  • \s*匹配可选空白
  • ([-]?\d)匹配“b”参数
  • [Xx]匹配“X”或“X”
  • \s*匹配可选空白
  • ([-]?\d)匹配“c”参数
  • \s*=\s*0将“=0”与一些可选空格匹配

让我们把它包装在一个类中

private static final class QuadraticEq {
    private static final Pattern EQN = Pattern.compile("([+-]?\\d+)[Xx]2\\s*([+-]?\\d+)[Xx]\\s*([+-]?\\d+)\\s*=\\s*0");
    private final int a;
    private final int b;
    private final int c;

    private QuadraticEq(int a, int b, int c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public static QuadraticEq parseString(final String eq) {
        final Matcher matcher = EQN.matcher(eq);
        if (!matcher.matches()) {
            throw new IllegalArgumentException("Not a valid pattern " + eq);
        }
        final int a = Integer.parseInt(matcher.group(1));
        final int b = Integer.parseInt(matcher.group(2));
        final int c = Integer.parseInt(matcher.group(3));
        return new QuadraticEq(a, b, c);
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("QuadraticEq{");
        sb.append("a=").append(a);
        sb.append(", b=").append(b);
        sb.append(", c=").append(c);
        sb.append('}');
        return sb.toString();
    }
}

注意\\,这是Java所必需的。

快速测试

System.out.println(QuadraticEq.parseString("4x2-4x-42=0"));

输出:

QuadraticEq{a=4, b=-4, c=-42}
 类似资料:
  • Python3 实例 以下实例为通过用户输入数字,并计算二次方程: 实例(Python 3.0+)# Filename : test.py # author by : www.runoob.com # 二次方程式 ax**2 + bx + c = 0 # a、b、c 用户提供 # 导入 cmath(复杂数学运算) 模块 import cmath a = float(input('输入 a: '))

  • 我在Google Code Jam中读到一个关于牛眼的问题。(比赛现在结束了,所以可以谈论它) 玛丽亚从t毫升黑色油漆开始,她将用它来画1厘米厚的戒指。厚度为1cm的圆环是半径相差1cm的两个同心圆之间的空间。 玛丽亚画了第一个黑色的环周围半径为r厘米的白色圆圈。 半径为1cm的圆盘面积为πcm2。需要一毫升油漆覆盖面积πcm2。玛丽亚最多能画多少个黑戒指? 根据我在纸上的计算,画一个有n个环的牛

  • 我如何转换这个公式,在其中求n的值₂. 我有所有的变量,除了n₂.

  • 有人知道TestNG如何根据为测试方法指定的数据提供者名称计算出数据提供者方法是什么吗? 我找到了这个解决方案:https://gist.github.com/ae6rt/3805639 但是,它没有考虑到数据提供者可能是: 在完全不同的类别中定义,或 在父类中定义,并且 该方法可以是静态的,也可以是非静态的 我试图自己破解一些东西,但后来我想我不可能是第一个试图解决这个问题的人,特别是因为显然T

  • 本文向大家介绍寻找二次方程的根– JavaScript,包括了寻找二次方程的根– JavaScript的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个包含三个数字的JavaScript函数(分别代表二次项的系数,线性项的系数和二次方的常数)。 并且我们需要找到根(如果它们是真实根),否则我们必须返回false。让我们为该函数编写代码 示例 以下是代码- 输出结果 控制台中的输出-

  • 问题内容: 当尝试从ImageMagick子进程中读取Node.js中的数据时,它损坏了。 一个简单的测试用例如下: 我希望这等同于可以正确写入二进制文件的命令行。 最初存在maxBuffer选项太小并导致文件被截断的问题。增加该值之后,文件现在看起来比预期的要大一些,并且仍然损坏。来自stdout的数据是通过HTTP发送所必需的。 从ImageMagick stdout读取此数据的正确方法是什么