这是我目前在项目上取得的进展。我试图实现这个ArrayList的东西,但文件继续trow相同的异常。
import java.util.*;
public class Numerican{
public static void main( String [] args ){
Scanner input = new Scanner(System.in);
ArrayList<Integer> array = new ArrayList<Integer>(10);
int count = input.nextInt() * 2;
while (count > 0){
array.add( 0 );
count = count - 1;
array.add(count, 2);
}
array.add(2, input.nextInt());
System.out.println(array.get(2));
}
}
据我了解,= new ArrayList<Integer>(10);
会将数组大小设置为10.我做错了吗?
答案 0 :(得分:7)
= new ArrayList<Integer>(10);
此行将CAPACITY初始化为10,表示内存在后端分配,但就您而言,数组仍为空。
Javadoc -
public ArrayList(int initialCapacity)
Constructs an empty list with the specified initial capacity.
这就是为什么如果您尝试添加超出add
的大小,对ArrayList
的调用可能会失败。
P.S。请记住,add
函数在使用2参数变量时首先采用索引,然后采用元素。
编辑:
ArrayList有两个不同的成员变量,大小和容量。容量是分配的内存量,大小是程序员插入的元素数量。
此处,容量= 10,大小= 0;
答案 1 :(得分:0)
如果索引超出范围(索引&lt; 0 || index&gt; size())将抛出IndexOutOfBoundsException。
所以我认为你正在访问索引&gt;列表的大小()。
size()===&gt;返回此列表中的元素数。
array.add(2,input.nextInt());当您的列表大小为1时,这是可能的例外...
答案 2 :(得分:0)
根据the javadocs:
构造一个具有指定初始容量的空列表。
请注意,ArrayList 为空(即不包含任何项目)。该值表示ArrayList的 capacity ,它是在必须分配更多内存之前可以添加的元素数。
另一方面,调用add()
实际上会向ArrayList添加一个项目。在您的示例中,array.add( 0 );
在列表末尾添加0
,array.add(count, 2);
在索引2
添加count
。我怀疑问题是count
不是ArrayList
中的有效索引。您应该通过插入SOP或使用调试器来检查它的值。
答案 3 :(得分:0)
嘿,好像你的问题是因为行
array.add(count, 2);
在索引计数
处添加2例如,您的输入大小为5,然后array.add(9,2);
,此时数组大小仅为1,因为容量和大小是ArrayList的两个不同参数。因此,您可以使用for循环而不是while来插入值
for(int i=0; i<count;i++)
{
array.add(i,2);
}
答案 4 :(得分:0)
count maybe >= 10
,也许源代码可以回答你的问题:
public void add(int index, E element) {
rangeCheckForAdd(index);
ensureCapacityInternal(size + 1); // Increments modCount!!
System.arraycopy(elementData, index, elementData, index + 1,
size - index);
elementData[index] = element;
size++;
}
rangeCheckForAdd():
/**
* A version of rangeCheck used by add and addAll.
*/
private void rangeCheckForAdd(int index) {
if (index > size || index < 0)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
答案 5 :(得分:0)
根据我对ArrayList的理解,您需要在顺序索引中将项添加到列表中 即如果尚未填写1到6,则无法将项目添加到第7个索引位置。
ArrayList.add(indexPosition,element);
如果您向列表添加元素,从indexPosition 0开始,每次将indexPosition增加1,它应该可以正常工作。
实施例
int i = 0;
(while i < 10){
array.add(i, numberToAdd);
i++;
}