我正在编写一个程序来添加和减去用户输入的多项式,但是我在处理负数时遇到了麻烦。该程序将正数与正数一起工作,但我得到以下输出与负数。
输出:
Coeficent: -2x^-2+3
Coeficent: 6
Exponent: 0
Exponent: 0
Exponent: 0
Exponent: 1
Exponent: 0
码:
Scanner in = new Scanner(System.in);
LinkedList list = new LinkedList();
String polynomial= "-2x^-2+3x^1+6";
String[] parts = polynomial.split("x\\^\\d+\\+?");
for (String part : parts) {
System.out.println("Coeficent: " + part);
}
String[] terms = polynomial.split("(-|\\+)");
for (String term : terms) {
String[] exponent = term.split("\\^");
System.out.println("Exponent: " + (exponent.length > 1 ? exponent[1] : "0"));
}
您可以使用正则表达式展开以分割输入。
使用正则表达式:((?:[\-\+]\dx\^[\-\+]\d)|[\-\+]\d)
将为您提供一个正确的开始,以捕获写出所有+/-符号的多项式。例如:+2x^+2+3x^+1+4x^-3+6
将是一个可接受的输入。然后,您将通过比赛进行交互并为自己处理每个比赛。之前的例子将为您提供以下匹配:
+2x^+2
+3x^+1
+4x^-3
+6
试试看here
考虑数学运算的序列。分步一步:
这是一个将每个术语的两个部分分开的例子:
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