用Java中的ArrayList按升序插入对象
所以我已经反复尝试了好几次不同的方法,但我似乎不知道该方法的合适算法。我正在创建一个多项式类,它使用一个数组列表,其中的项(int coeff,int expo)coeff是多项式的系数,expo是指数。在测试类中,我必须插入多个不同的术语对象,但它们需要按指数升序插入(例如,4x^1+2x^3+x^4+5x^7) 这是我在insert()方法末尾的代码,该方法使用两个参数,coeff和expo:用Java中的ArrayList按升序插入对象,java,netbeans,arraylist,sorting,Java,Netbeans,Arraylist,Sorting,所以我已经反复尝试了好几次不同的方法,但我似乎不知道该方法的合适算法。我正在创建一个多项式类,它使用一个数组列表,其中的项(int coeff,int expo)coeff是多项式的系数,expo是指数。在测试类中,我必须插入多个不同的术语对象,但它们需要按指数升序插入(例如,4x^1+2x^3+x^4+5x^7) 这是我在insert()方法末尾的代码,该方法使用两个参数,coeff和expo: public class Polynomial { private ArrayList&l
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 ;
}
}
}
但这也不起作用,因为它会反过来引发同样的问题。如果有人能提供一些解决方案或答案,我将不胜感激,因为我非常困惑。在这一点上,我肯定我只是把它弄得太复杂了。我只想知道如何识别指数更大,然后返回for循环,直到它小于或等于指数的指数
另外,我应该提到,我不允许使用任何其他集合或类,所以我必须使用for、if、else或do while语句来实现这一点。
提前谢谢 将其从for循环中删除:
else if (expo > listTermExpo)
{
polynomials.add(newTerm);
return;
}
polynomials.add(newTerm);
return;
将其放置在for循环之后:
else if (expo > listTermExpo)
{
polynomials.add(newTerm);
return;
}
polynomials.add(newTerm);
return;
推理:只有当该术语不小于列表中的任何术语(而不仅仅是第一个术语)时,才希望将其添加到列表的末尾
此外,它是很好的格式有;紧跟在语句后面的是for,中间没有空格,而()s中间没有空格。我已经编辑了从您那里复制的代码,以显示我的意思。这应该具有您指定的确切行为:
public void insert(int coeff, int expo) {
Term newTerm = new Term(coeff, expo);
int max = polynomials.size();
int min = 0;
int pivot;
while (max > min) {
pivot = (min + max) / 2;
if (expo > polynomials.get(pivot).getExpo()){
min = pivot + 1;
}
else {
max = pivot;
}
}
polynomials.add(min, newTerm);
}
如果列表中已经有这样的术语,该算法将在第一个具有相同指数的术语前面添加新术语 总之,你要问的是如何对ArrayList进行排序,将系数最大的项放在ArrayList索引0处,第二大的项放在索引1处,等等?不,实际上相反,我想把指数最大的项放在ArrayList的末尾,指数最小的项放在ArrayList索引0处,系数与多项式的排序无关这解决了我的问题!我知道我让事情变得比需要的更复杂了。非常感谢:)明白了,感谢您的反馈!