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