Как я могу получить коэффициенты и показатели от полиномиальной строки? - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь извлечь коэффициенты и показатели из строки полинома, а затем сохранить их в массив, чтобы я мог использовать эти массивы для создания нового термина, с которым я могу выполнять математические операции (например, сложение, вычитание и умножение)

List<Term> poly = new ArrayList<>;
String poly = "26x^7+5x^6-8x^3-2";

int[] coeff = // Something like using split method here to get coeffs
int[] expo = // Same here but with exponents

for(int i = 0; i < coeffs.length; i++){
    poly.add(new Term(coeff[i], expo[i]);
}

Проблема в том, что я действительно не знаю, как это сделать.Я пробовал так много способов, и все это привело к ошибке ..

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Вот решение, которое игнорирует дополнительные сложности с x ^ 1 и x ^ 0 и коэффициентом = 1.

. Использует Lookahead в регулярном выражении, как описано здесь

import java.util.ArrayList;
import java.util.List;

public class MyClass {

    public static void main(String[] args) {
        // expect format ax^n for each term. in particular in the cases a=1, x=1 and x=0.
        String poly = "26x^7+5x^6-8x^3+1x^1-2x^0";

        // remove ^ and then split by x and by + and - keeping the sign
        String[] numbers = poly.replace("^", "").split("((?=\\+)|(?=\\-)|x)");

        List<Integer> coeff = new ArrayList<>();
        List<Integer> expo = new ArrayList<>();

        // we can now assume that for every coefficient there is an exponent
        for (int i = 0; i < numbers.length; i += 2) {
            coeff.add(Integer.parseInt(numbers[i]));
            expo.add(Integer.parseInt(numbers[i + 1]));
        }

        System.out.println(coeff);
        System.out.println(expo);
    }
}

Выход:

[26, 5, -8, 1, -2]
[7, 6, 3, 1, 0]
0 голосов
/ 08 мая 2019

Я бы попытался разбить строку поли, используя символы "+" или "-".Если в java есть метод разбиения regex, это было бы целесообразно.

Массив, полученный в результате этого разбиения, - это то, что должно быть повторено в вашем цикле для заполнения списка Poly.

Еще одна вещь, о которой следует помнить, это термин «-2» в вашем полиноме, который технически равен x ^ 0, и любые термины «топор», которые являются x ^ 1.

...