我正在尝试将一些数据保存到数组中但不幸的是所有数据都保存到数组[0]中,而它通常不应该这样。
int j = 0;
while ( j < data.length ) {
float unbin = binary(data[2*j+1])+binary(data[2*j]);
float[] bin = new float[] {unbin};
print(bin);
j = j + 2;
}
它写了bin[0]
中的所有数据,我的代码出了什么问题?
我怎么写:
bin[j] = unbin ?
将数据保存在bin [0]中,而j = 0,依此类推?
这是更新的代码:
int j = 0 ;
float[] bin1 = new float[(data.length/2)];
while (j < data.length ) {
if ( data[2*j+2] >= 0 ) {
String unhx =(binary(data[2*j+3])+binary(data[2*j+2])+binary(data[2*j+1])+binary(data[2*j]));
float unbin = ((float)unbinary(unhx)/100);
bin1[j/2] = unbin;
print(bin1[1]);
}
else if ( data[2*j+2] < 0 && data[2*j+3] < 0 ) {
data[2*j] = (byte)(-data[2*j]);
data[2*j+1] = (byte)(-data[2*j+1]);
String unhx =(binary(data[2*j+1])+binary(data[2*j]));
float unbin = ((-1)*(float)unbinary(unhx)/100);
bin1[j/2] = unbin;
print(bin1[1]);
}
j = j + 2;
}
答案 0 :(得分:7)
您正在每次迭代时创建一个 new 数组(长度为1)。您需要在 while循环之前创建数组:
float[] bin = new float[...];
while (...) {
...
bin[j] = unbin;
}
(目前还不清楚这里的长度应该是多少 - 我怀疑你不希望将j
乘以2 和每次增加2倍。)
答案 1 :(得分:2)
Bin的范围在你的循环中。每次使用单个元素重新创建它,例如{unbin}。
看起来你想在每次迭代时将一个两个字节长的二进制项转换成一个浮点数。
int j = 0;
float[] bin = new float[(data.length/2)];
while ( j < data.length ) {
float unbin = binary(data[2*j+1])+binary(data[2*j]);
bin[j/2] = unbin;
j += 2;
}
答案 2 :(得分:2)
首先,您需要在循环之前声明bin数组(以便在离开循环后它存在(保留在范围内)。
其次,当您声明bin数组时,需要指定数组的大小
float bin[] = new float[10]; // Creates an array of floats with 10 slots. b[0] - b[9]
(您可能希望数组与“data”数组的大小相同,因此请使用data.length代替“10”)
然后在循环中你会说
bin[j] = unbin;
此外,你增加j(j = j+2
)的方式,看起来你想写入b [0] b [2] b [4]等。你跳过b [1],b [2],b [3]。如果这是您的意图,请确保为bin数组分配足够的空间。 (我认为你的意思是j = j+1
);
答案 3 :(得分:1)
在Jon的回答之后,以及在循环之外定义数组,你只需要向J添加1,但确保条件为
while ((2*j) <= data.length) {
....
}
你也会抛出ArrayIndexOutOfBoundsExceptions,因为当j = data.length时,2 * j = 2 * data.length,它比你的数据数组大。