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;
}

(ここでの長さは不明です-毎回2をj掛けて2ずつ増やしたくないのではないかと思います。)

于 2012-06-14T13:33:50.810 に答える
2

まず、ループの前にビン配列を宣言する必要があります(ループを離れた後も存在する(スコープ内に残る)ように)。

次に、bin 配列を宣言するときに、配列のサイズを指定する必要があります。
float bin[] = new float[10]; // Creates an array of floats with 10 slots. b[0] - b[9] (おそらく、配列を「データ」配列と同じサイズにしたいので、「10」の代わりに data.length を使用してください)

次に、ループであなたが言うだろう
bin[j] = unbin;

また、j ( ) をインクリメントする方法は、j = j+2b[0] b[2] b[4] などに書き込みたいようです。b[1]、b[2]、b[3] をスキップします。 . これが意図している場合は、bin 配列に十分なスペースを割り当てるようにしてください。(私はあなたがするつもりだと思いますj = j+1);

于 2012-06-14T13:40:01.073 に答える
2

Bin はループ内でスコープされます。{unbin} などの単一の要素で毎回再作成されます。

各反復で 2 バイト長のバイナリ項目を float に変換したいようです。

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 に答える
1

Jonの回答に続いて、ループの外側で配列を定義するだけでなく、Jに1を追加するだけで済みますが、条件が

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

j = data.length、2*j = 2* data.length の場合、データ配列よりも大きいため、ArrayIndexOutOfBoundsExceptions もスローされます。

于 2012-06-14T13:40:17.450 に答える