2012-02-17 18 views
0

我有2个数组和一个ArrayList爪哇 - 从型浮动的阵列,成浮点型的新阵列插入值由指数

float[] a = new float [1000]; // contains 1000 float values 

float[] b = new float [1000]; // contains 1000 float values 

ArrayList<Float> c = new ArrayList<Float>(); // contains unique list of float values from array a 

我希望执行的以下

for (int i=0; i<a.length; i++) { 
     b[c.indexOf(c.get(i)]++; 
} 

基本上,我想要通过a的长度,找到C中第一个值的位置,然后将其插入到一个新的数组b中。

但是,我返回的索引超出了绑定错误,或不兼容的类型错误预计float()发现int()。

由于原始类型的原因,我还在定义float时试验了包装。

任何帮助将是伟大的。

+2

p是什么? – Jivings 2012-02-17 11:43:22

+1

你能解释一下p是什么吗? – assylias 2012-02-17 11:44:19

+0

什么是'p' ...? – Azodious 2012-02-17 11:45:12

回答

1

这里既有数组a和b是float类型。

由语句 B [c.indexOf(c.get(I)] ++;你申请的增量运算符是对于int数据类型不浮

所以,做你想做的。你必须将float浮点数转换为你可以应用的增量运算符

+0

我的意思是说您必须将b数组转换为int。 还有一件事,你可以尝试使用以下 b [x] = b [x] + 1;而不是b [x] ++。 这样你就不必担心类型转换。 – 2012-02-17 12:42:02

0
ArrayList<Float> c = new ArrayList<Float>(); // contains unique list of float values from array a 

,因为它包含从a只有唯一的入口,它的长度< =则为a.length。因此你的异常IndexOutOfBounds

c.get(i) 

如果i >= c.size():它会抛出异常。

这是一个解决办法:

for (int i=0; i<a.length; i++) 
{ 
    if(i >= c.size()) 
     break; 
    b[c.indexOf(c.get(i)]++; 
} 

,或者简单

for (int i=0; i<c.size(); i++) 
{ 
    b[c.indexOf(c.get(i)]++; 
} 

,或者更简单地

for (int i=0; i<a.length; i++) 
{ 
    b[i]++; 
} 

但是,你想在a重复值做什么其余索引?

+0

wheres不可容忍的类型错误? – wintersolutions 2012-02-17 12:01:45

-1

如果您的数组列表c没有1000个元素,该怎么办?

怎么样

for (int i=0; i<c.size(); i++) { 
     b[c.indexOf(c.get(i)]++; 
} 
+0

java.lang。IndexOutOfBoundsException:索引:256,大小:256 – clazzy 2012-02-17 11:54:35

+0

请在for循环前检查并查看ArrayList c的大小 – Jayanga 2012-02-17 11:58:15

0

从你的问题,它看起来像你想是这样的:

for (int i = 0; i < a.length; i++) { 
    if (c.contains(a[i])) { // when c contains a[i] 
     b[i] = a[i];   // insert a[i] into b 
    } 
}