因此,我创建了一个类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()-以指数的升序排列术语。
请给我推荐最好的解决方案
输出
run:
Enter the number of terms :
2
BUILD SUCCESSFUL (total time: 3 seconds)
答案 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", "");
}
}