Добавление дубликатов в ArrayList - PullRequest
2 голосов
/ 11 ноября 2011

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

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

ArrayList (или любой список) принимает дубликаты.

Однако, поскольку вы хотите сгруппировать мономы по их мощности, вы можете рассмотреть возможность использования Map<Integer,Foo>, где ключ - это сила.У Фу есть много вариантов.Foo может быть ArrayList<Monomial>, ArrayList<Double>, содержащим только коэффициенты, которые вы добавите позже.Это требует написания некоторого кода с вашей стороны или использования третьей частично библиотеки для MultiMap.

Или Foo может быть Double, представляющим суммированный коэффициент, и в этом случае вам нужно написать add (Monomial)метод, который обновляет Double каждый раз.

Если возможный диапазон мощностей мал и известен, вы также можете использовать простой массив.

0 голосов
/ 11 ноября 2011

Вот мое решение, вы можете добавить два полинома одинаковой степени.Следите за ошибками.

public class Polynome {


    private double[] coefficients;
    private int degre;



    public Polynome(int degre) {

        if (degre < 0) {
            System.out.println("Invalid Degree");
        }

        this.degre = degre;
        coefficients = new double[degre + 1];
        for (int i = 0; i < degre; i++)
            coefficients[i] = 0;

        coefficients[degre] = 1;
    }


    public void setCoefficient(int degre, double coefficient) {
        if (degre < 0 || degre > this.degre) {
            System.out.println("Invalid Degree");
        }

        if (coefficient == 0 && degre == this.degre && this.degre != 0) {
            System.out.println("Null Degree");
        }

        coefficients[degre] = coefficient;
    }

    /*
     * Returns the coeff giving the degree of the element
     */
    public double getCoefficient(int degre) {
        if (degre < 0 || degre > this.degre) {
            return 0;
        }

        if (degre == this.degre && this.degre != 0) {
            return coefficients[this.getDegre()];
        }

        return this.coefficients[degre];
    }



    public String ToString() {

        if (degre == 0)
            return "" + this.coefficients[0];

        String result = "" + this.coefficients[degre]+" x^" + degre;
        for (int i = degre-1  ; i > 0 ; i--){
            if (this.coefficients[i] < 0) {
                result += "-" + Math.abs(this.coefficients[i]) + " x^" + i;
            }
            else {
                if (this.coefficients[i] > 0){
                    result += " + " + this.coefficients[i] + " x^" + i;
                }
            }
        }

        if (this.coefficients[0]!= 0) result += " + " + this.coefficients[0]  ;
        return result;
    }



    /*
     * Returns the degree of the current poly
     */
    public int getDegre() {
        return degre;
    }


    /*
     * Adds two Polys with the same degrees
     */
    public Polynome add(Polynome p) {
        Polynome result = new Polynome(p.getDegre());
        int deg = result.getDegre();


        for(int i = deg  ; i >0 ; i--) {
            result.coefficients[i] = this.getCoefficient(i) + p.getCoefficient(i);
        }

        return result;
    }






    public static void main(String...args) {
        Polynome p = new Polynome(2);
        p.setCoefficient(2, 7);

        Polynome p1 = new Polynome(2);
        p1.setCoefficient(2, 2);

        System.out.println(p.ToString() + "\n" + p1.ToString() + "\n\n" + (p.add(p1)).ToString());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...