0

我正在尝试将一些数据保存到数组中,但不幸的是,所有数据都保存到了数组 [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 ? 

在 j = 0 时将数据保存在 bin[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;
  }
4

4 回答 4

7

您正在每次迭代中创建一个数组(长度为 1)。您需要在 while 循环之前创建数组:

float[] bin = new float[...];
while (...) {
    ...
    bin[j] = unbin;
}

(目前还不清楚这里的长度应该是多少——我怀疑你不想每次乘以j2并增加 2。)

于 2012-06-14T13:33:50.810 回答
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;
}
于 2012-06-14T13:34:23.713 回答
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);

于 2012-06-14T13:40:01.073 回答
1

在乔恩的回答之后,以及在循环之外定义数组,您只需要在 J 上加 1,但要确保条件为

while ((2*j) <= data.length) {
    ....
}

您还将抛出 ArrayIndexOutOfBoundsExceptions,因为当 j = data.length, 2*j = 2* data.length 时,它比您的数据数组大。

于 2012-06-14T13:40:17.450 回答