Java多项式乘法与ArrayList
我的程序中的一个方法有问题。该方法设计为取2个数组列表,并像多项式一样执行二者之间的乘法 例如,如果我说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
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都可以正常工作