多项式程序无法正常工作

时间:2019-07-12 10:07:58

标签: java

因此,我创建了一个类Term。此类表示多项式的项,例如2x4,其中2是系数,而4是该项的指数。  学期。

数据成员:- 整数系数 整数指数

public class Term2 {

    private int coefficient;
    private int exponent;

    public Term2() {
        coefficient = 0;
        exponent = 0;
    }


    public Term2(int coefficient, int exponent) {
        this.coefficient = coefficient;
        this.exponent = exponent;
    }


    public int getCoefficient() {
        return coefficient;
    }

    public void setCoefficient(int coefficient) {
        this.coefficient = coefficient;
    }

    public int getExponent() {
        return exponent;
    }

    public void setExponent(int exponent) {
        this.exponent = exponent;
    }

}

然后,我创建了另一个名为“多项式”的类。多项式的内部表示是一个术语数组。此数组的大小应固定。一世 为此类提供一个构造函数,该构造函数会将多项式对象的所有项设置为零(其中系数为0,指数为0)。

然后我创建了一个名为 setTerm(int,int) 其中设置多项式对象的项。的每个后续调用 此函数应设置多项式对象的下一项。

package javaapplication2;



import java.util.Scanner;

public class Polynomials {

    private Term2 terms[];
    private int valueLength = 0;

    public Polynomials(int termSize) {
        terms = new Term2[termSize];
        for (int i = 0; i < terms.length; i++) {
            terms[i] = new Term2(0, 0);
        }
    }

    public void setTerm(int c, int e) {
        if (valueLength >= terms.length) {
            System.out.println("big");
            return;
        }

        terms[valueLength++] = new Term2(c, e);

        if (e > 0) {
            for (int i = 0; i < terms.length; i++) {
                terms[i] = new Term2(c, e);

            }
        }
    }

    public static void main(String[] args) {
        int n;
        System.out.println("Enter the number of terms : ");
        Scanner in = new Scanner(System.in);
        n = in.nextInt();

        Polynomials p = new Polynomials(n);

        p.setTerm(2, 3);
        Term2 t = new Term2();

    }

}

被困

代码结构是否正确,因为我无法获得预期的输出,我也想实现以下两个功能

1.sort()-以指数的升序排列术语。

  1. 提供了一个打印多项式对象的功能

请给我推荐最好的解决方案

输出

run:
Enter the number of terms : 
2
BUILD SUCCESSFUL (total time: 3 seconds)

1 个答案:

答案 0 :(得分:1)

这里错误是一个过于复杂的数据结构。 (除了if (e > 0) { ... }之外,其他事情都弄糟了。)

从指数到Term2或到系数的映射。

public class Polynomials {

    private SortedMap<Integer, Term2> termsByExponent = new TreeMap<>();

    public Polynomials() {
    }

    public void setTerm(int c, int e) {
        termsByExponent.put(e, new Term2(c, e));
    }

    /**
     * @param exp the exponent (not the index).
     */
    public Term2 getTerm(int exp) {
        return termsByExponent.computeIfAbsent(exp, e -> new Term2(0, e));
    }

    public Term2 getTermByIndex(int i) {
        return termsByExponent.values().get(i);
    }

    public int size() {
        return map.size();
    }

    @Override
    public String toString() {
        return termsByExponent.values().stream()
            .map(t -> String.format("%s%d.x^%d",
                t.getCoefficient() >= 0 ? "+" : "", // Minus already there.
                t.getCoefficient(),
                t.getExponent()))
            .collect(Collectors.join(""))
            .replaceFirst("\\.x\\^0\\b", "")
            .replaceFirst("\\^1\\b", "");
    }
}