Расщепление полинома с негативами - PullRequest
0 голосов
/ 13 марта 2019

Я пишу программу для сложения и вычитания введенных пользователем полиномов, но столкнулась с проблемой работы с отрицательными числами.Программа будет работать нормально с положительными числами, но я получаю следующий вывод с отрицательными числами.

Вывод:

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

Ответы [ 3 ]

0 голосов
/ 13 марта 2019

Вы можете расширить использование регулярного выражения для разделения ввода.

Использование регулярного выражения: ((?:[\-\+]\dx\^[\-\+]\d)|[\-\+]\d) даст вам правильный старт для захвата многочленов со всеми записанными знаками +/-.Например: +2x^+2+3x^+1+4x^-3+6 будет принятым вводом.Затем вы будете проходить матчи и обрабатывать каждый для себя.В предыдущем примере вы получите следующие совпадения:

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

попробуйте здесь

0 голосов
/ 13 марта 2019

Вот пример, который разделяет две части каждого термина:

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
0 голосов
/ 13 марта 2019

Рассмотрим последовательность математических операций.Разделите шаг за шагом:

  • сначала, разделите сложения / вычитания, но здесь проверьте, есть ли у вашего поиска левый операнд.Если левого операнда нет, это знак вместо операции.Итак, определите те +/-, у которых действительно есть число или переменная слева, но НЕТ оператора.
  • Затем, разделите умножения и деления
  • Наконец, разделите для тех операций с наибольшимприоритет - в вашем случае экспоненциальная функция
...