Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带负分裂多项式_Java_Polynomials_Exponent - Fatal编程技术网

Java 带负分裂多项式

Java 带负分裂多项式,java,polynomials,exponent,Java,Polynomials,Exponent,我正在写一个程序来加减用户输入的多项式,但是我在处理负数时遇到了麻烦。这个程序可以很好地处理正数,但是我得到了下面的负数输出 输出: Coeficent: -2x^-2+3 Coeficent: 6 Exponent: 0 Exponent: 0 Exponent: 0 Exponent: 1 Exponent: 0 代码: 考虑数学运算的顺序。逐步拆分: 首先,拆分加法/减法,但这里检查您的查找是否有左操作数。如果没有左操作数,则它是一个符号而不是一个运算。 因此,识别那些在其左侧有数字或变

我正在写一个程序来加减用户输入的多项式,但是我在处理负数时遇到了麻烦。这个程序可以很好地处理正数,但是我得到了下面的负数输出

输出:

Coeficent: -2x^-2+3
Coeficent: 6
Exponent: 0
Exponent: 0
Exponent: 0
Exponent: 1
Exponent: 0
代码:


考虑数学运算的顺序。逐步拆分:

首先,拆分加法/减法,但这里检查您的查找是否有左操作数。如果没有左操作数,则它是一个符号而不是一个运算。 因此,识别那些在其左侧有数字或变量,但没有运算符的+/-。 然后,分割乘法和除法 最后,对那些具有最高优先级的操作进行拆分—在您的例子中是指数函数
您可以扩展使用正则表达式来拆分输入

使用正则表达式:?:[\-\+]\dx\^[\-\+]\d |[\-\+]\d将为您提供一个正确的开始,以捕获写出所有+/-符号的多项式。例如:+2x^+2+3x^+1+4x^-3+6将是可接受的输入。然后,您将通过匹配进行交互,并自行处理每个匹配。前面的示例将提供以下匹配项:

+2x^+2 +3x^+1 +4x^-3 +6
试试看

这里有一个例子,将每个术语的两个部分分开:

public static void main(String ...args) {

    Pattern termPat = Pattern.compile("([+-]?(\\d+|(?=x)))(x(\\^([+-]?(\\d+)))?)?");

    System.out.println("Input: " + polynomial);

    int pos = 0;
    Matcher m = termPat.matcher(polynomial);
    while (true) {
        if (!m.find(pos))
            break;
        int coeff = Integer.parseInt(m.group(1) + (m.group(2).length() == 0 ? "1" : ""));
        int degree = Integer.parseInt((m.group(3) == null)? "0" : (m.group(5) == null)? "1" : m.group(5));
        System.out.println(String.format("Term - Coeff: %d  Degree: %d", coeff, degree));
        pos = m.end();
    }
}
输出:

Input: -2x^-2+3x^1+6
Term - Coeff: -2  Degree: -2
Term - Coeff: 3  Degree: 1
Term - Coeff: 6  Degree: 0

增强了我的答案,因此您可以省去“^1”,并将每个术语的每个部分解析为一个数字。谢谢您,这帮了大忙。我修改了它,将其存储在一个2D数组中,最后是一个链表。再次更新了我的答案。现在这个东西应该是任何有效的多项式形式。你现在可以把系数从“x”上去掉如果这确实是您想要的,请单击复选标记。
Input: -2x^-2+3x^1+6
Term - Coeff: -2  Degree: -2
Term - Coeff: 3  Degree: 1
Term - Coeff: 6  Degree: 0