我正在编写一个程序来添加和减去用户输入的多项式,但我遇到了处理负数的麻烦。该程序的正数将正常工作,但我得到以下输出的负数。
输出:
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"));
}
这是一个示例,将每个术语的两个部分分开:
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
您可以使用正则表达式进行分割输入时展开。
使用正则:((?:[-+]dx^[-+]d)|[-+]d)
将为您提供正确的启动以捕获所有/-符号写出的多项式。例如:+2x^+2+3x^+1+4x^-3+6
将是接受的输入。然后,您将通过比赛结合并为他们进行处理。以前的示例将为您提供以下匹配:
-
+2x^+2
-
+3x^+1
-
+4x^-3
-
+6
在这里尝试
考虑数学操作的序列。分步:
- 首先,拆分添加/减法,但在这里检查您的发现是否具有左上角。如果没有左术室,则是一个标志,而不是操作。因此,确定确实在其左侧具有数字或变量的/-,但没有操作员。
- 然后,分配乘法和划分
- 最后,为具有最高优先级的操作分开 - 在您的情况下,指数函数