我有一个包含String
,int
和double
的ArrayList,共有20个元素。
我试图将Strings
移动到String数组,将ints
移动到int数组,将doubles
移动到双数组。但是我无法弄清楚这是怎样的,这就是我对整数整理的看法:
private ArrayList <Object> randomList = new ArrayList <Object>();
private int [] intArray = new int[10];
public void example(){
createArray();
for(int i = 0; i<randomList.size();i++){
if(randomList.get(i)instanceof Integer){
intArray[i]= (Integer) randomList.get(i);
}
}
}
我无法理解为什么这个dosnt工作,它试图将不是Integers的对象添加到我的数组中导致outOfBounds异常,因为它试图添加10个以上的元素。
答案 0 :(得分:2)
你有索引不匹配,就是这样。尝试类似:
int index = 0;
for(int i = 0; i<randomList.size();i++)
{
if(randomList.get(i)instanceof Integer)
{
intArray[index++]= (Integer) randomList.get(i);
}
}
您还应检查特定数组的当前索引是否小于上限,即该数组的初始大小:
if(randomList.get(i) instanceof Integer && index < intArray.length)
答案 1 :(得分:0)
您需要为每个输出数组维护一个单独的索引。
答案 2 :(得分:0)
首先,你应该永远不要让所有这些数据类型聚集在对象的ArrayList上。但如果你已经拥有它们:
for(Object o : randomList)
{
if(o instanceof Integer)
{
//add to inteeger list
}
else if(o intenaceof String)
{
//add to string list
}
//...etc
}
答案 3 :(得分:0)
尝试将数组初始化为:
private int [] intArray = new int[randomList.size()];
尝试使用另一个索引为数组赋值:
int count=0;
for(int i = 0; i<randomList.size();i++){
if(randomList.get(i)instanceof Integer){
intArray[count++] = (Integer) randomList.get(i);
}
}
最后,您可能希望使用System.arraycopy
截断未使用的数组片段,如下所示:
private int [] finalArray= new int[count;
System.arraycopy(intArray, 0, finalArray, 0, count);
答案 4 :(得分:0)
private int [] intArray = new int[10];
您的数组大小为10,但您的列表没有大小限制。
private int [] intArray = new int[randomList.size()];
可能有用。