【问题标题】:Splitting polynomial with negatives用负数分割多项式
【发布时间】:2019-03-12 22:30:39
【问题描述】:

我正在编写一个程序来加减用户输入的多项式,但我在处理负数时遇到了麻烦。该程序可以使用正数正常工作,但我会得到以下带有负数的输出。

输出:

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"));
}

【问题讨论】:

    标签: java polynomials exponent


    【解决方案1】:

    这是一个将每个术语的两个部分分开的示例:

    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”,并将每个术语的每个部分解析为一个数字。
    • 感谢您的帮助。我对其进行了调整,将其存储在二维数组中,最终存储在链接列表中。
    • 再次更新了我的答案。现在这个东西应该采用任何有效的多项式形式。您现在可以将系数从“x”中删除。 - 如果这确实是您想要的,请单击复选标记。
    【解决方案2】:

    您可以扩展使用正则表达式来拆分输入。

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

    1. +2x^+2
    2. +3x^+1
    3. +4x^-3
    4. +6

    试试看here

    【讨论】:

      【解决方案3】:

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

      • 首先,拆分加法/减法,但在这里检查您的发现是否有左操作数。如果没有左操作数,则它是符号而不是操作。 因此,请确定那些在其左侧确实有数字或变量但没有运算符的 +/-。
      • 然后,拆分乘法和除法
      • 最后,为那些具有最高优先级的操作进行拆分 - 在您的情况下是指数函数

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多