因此,我来回尝试了多种不同的方法,但我似乎无法围绕这种方法的适当算法。我正在创建一个使用 ArrayList 的多项式类,其中 Term(int coeff, int expo) coeff 是多项式的系数,expo 是指数。在测试类中,我必须插入多个不同的 Term 对象,但它们需要按指数升序插入(例如,4x^1 + 2x^3 + x^4 + 5x^7)
这是我在 insert() 方法末尾的代码,它接受两个参数,即 coeff 和 expo:
public class Polynomial
{
private ArrayList<Term> polynomials ;
/**
* Creates a new Polynomial object with no terms
*/
public Polynomial()
{
polynomials = new ArrayList<>() ;
}
/**
* Inserts a new term into its proper place in a Polynomial
* @param coeff the coefficient of the new term
* @param expo the exponent of the new term
*/
public void insert(int coeff, int expo)
{
Term newTerm = new Term (coeff, expo) ;
if (polynomials.isEmpty())
{
polynomials.add(newTerm);
return;
}
int polySize = polynomials.size() - 1 ;
for (int i = 0 ; i <= polySize ; i++)
{
Term listTerm = polynomials.get(i) ;
int listTermExpo = listTerm.getExpo() ;
if ( expo <= listTermExpo )
{
polynomials.add(i, newTerm);
return;
}
else if ( expo > listTermExpo )
{
polynomials.add(newTerm) ;
return ;
}
}
}
问题出现在代码末尾附近。一旦我输入了一个系数不是 <= 索引处的 Term 的 Term,它就会转到 else if 语句并将其添加到列表的末尾。这是错误的,因为它需要添加到它刚刚变得大于下一个系数的地方。仅仅因为它大于该系数并不意味着它是最大的系数。我尝试向后执行 for 语句,其中:
for (i = polySize ; i >= 0 ; i--)
{
etc.
}
但这也不起作用,因为它反过来提出了同样的问题。如果有人可以提供一些解决方案或答案,将不胜感激,因为我很困惑。在这一点上,我确定我只是让它太复杂了。我只想知道如何识别指数较大,然后返回 for 循环,直到它小于或等于索引的指数。
另外,我应该提一下,我不允许使用任何其他集合或类,所以我必须使用 for、if、else 或 do while 语句来执行此操作。提前致谢!