Java多项式乘法与ArrayList

Java多项式乘法与ArrayList,java,arraylist,multiplication,polynomial-math,Java,Arraylist,Multiplication,Polynomial Math,我的程序中的一个方法有问题。该方法设计为取2个数组列表,并像多项式一样执行二者之间的乘法 例如,如果我说list1={3,2,1}和list2={5,6,7};我正在尝试获取返回值15,28,38,20,7。但是,我只能得到一条错误消息,上面写着: 线程“main”java.lang.IndexOutOfBoundsException中的异常:索引:0,大小:0 我提供了以下方法: private static ArrayList<Integer> multiply(ArrayLis

我的程序中的一个方法有问题。该方法设计为取2个数组列表,并像多项式一样执行二者之间的乘法

例如,如果我说
list1={3,2,1}
list2={5,6,7}
;我正在尝试获取返回值
15,28,38,20,7
。但是,我只能得到一条错误消息,上面写着:

线程“main”
java.lang.IndexOutOfBoundsException中的异常:索引:0,大小:0

我提供了以下方法:

private static ArrayList<Integer> multiply(ArrayList<Integer> list1,ArrayList<Integer> list2) {

    ArrayList<Integer> array =new ArrayList<Integer>(list1.size()+list2.size());

    for (int i=0;i<array.size();i++)
        array.add(i, 0);

    for (int i = 0; i < list1.size(); i++)

        for (int j = 0; j < list2.size(); j++)

            array.set(i+j, ((list1.get(i) * list2.get(j))+array.get(i+j)));

    return array;

}
私有静态ArrayList乘法(ArrayList list1,ArrayList list2){
ArrayList数组=新的ArrayList(list1.size()+list2.size());

对于(int i=0;i,您可能需要检查
(i+j)
中是否存在一个元素,然后再将其相加。因此,请执行此操作

int elementAtLoc = 0;
if(array.size() > i+j && array.get(i+j) != null ){
   elementAtLoc = array.get(i+j);
}
array.set(i+j, ((list1.get(i) * list2.get(j))+elementAtLoc));
没有必要这样做:

for (int i=0;i<array.size();i++)
    array.add(i, 0);

for(int i=0;i将第一个for循环更改为:

for (int i = 0 ; i < list1.size() + list2.size() ; i++)
    array.add(0);
for(int i=0;i

正如您所看到的,
array.size()
最初是
0
,因此从来没有输入first for循环,因此没有向
数组添加任何内容。
ArrayList
的容量与其大小不同。

请查看这些代码:

/**
 * The array buffer into which the elements of the ArrayList are stored.
 * The capacity of the ArrayList is the length of this array buffer.
 */
private transient Object[] elementData;

/**
 * The size of the ArrayList (the number of elements it contains).
 *
 * @serial
 */
private int size;

public ArrayList(int initialCapacity) {
super();
    if (initialCapacity < 0)
        throw new IllegalArgumentException("Illegal Capacity: "+
                                           initialCapacity);
this.elementData = new Object[initialCapacity];
}

public int size() {
   return size;
}
/**
*存储ArrayList元素的数组缓冲区。
*ArrayList的容量是此数组缓冲区的长度。
*/
私有瞬态对象[]元素数据;
/**
*ArrayList的大小(它包含的元素数)。
*
*@serial
*/
私有整数大小;
公共阵列列表(int initialCapacity){
超级();
如果(初始容量<0)
抛出新的IllegalArgumentException(“非法容量:”+
初始容量);
this.elementData=新对象[初始容量];
}
公共整数大小(){
返回大小;
}

此时,您必须通过构造函数创建一个实例,因为他们没有指定变量“size”,该变量包含实际元素的数量。这就是为什么会出现此异常的原因。

是的,当我调用其他方法(例如加法和减法)时,list1和list2都可以正常工作