0

Javaの最後の位置で配列に要素を追加しようとしていますが、追加できません...というか、方法がわかりません。これは現時点でのコードです:

String[] values = split(line, ",");
  int[][] coordinates = new int[2][values/2];
  for(int i = 0; i < values.length; i++) {
    if(i % 2 == 0) { //THIS IS EVEN VALUES AND 0
      coordinates[0][coordinates[0].length] = values[i];
    } else { //THIS IS ODD VALUE
      coordinates[1][coordinates[1].length] = values[i];
    }
  }

編集されたバージョン:

String[] values = split(line, ",");
  int[][] coordinates = new int[2][values/2];
  int x_pos = 0;
  int y_post = 0;
  for(int i = 0; i < values.length; i++) {
    if(i % 2 == 0) { //THIS IS EVEN VALUES AND 0
      coordinates[0][x_pos] = values[i];
      x_pos++;
    } else { //THIS IS ODD VALUE
      coordinates[1][y_pos] = values[i];
      y_pos++;
    }
  }

はCSVファイルから読み取られています。どちらの場合も、coordinates []の値を常に最大配列サイズで追加しようとするため、私のコードは間違っていると思います。

最後に設定した位置に追加するにはどうすればよいですか?

ありがとう!

/ e:編集されたバージョンは正しいでしょうか?

4

5 に答える 5

1

元のコードには2つの問題があります。

  • 配列のアドレス指定が不適切で、Java配列のlas要素が位置length-1にあるため、次のようになります。ArrayOutOfBoundsException
  • 1を引いて修正したとしてもlength、Java配列は含まれる要素の数ではなく、初期化されて含まれる要素の数に関係するため、常に最後の要素のみを上書きします。

それ以外の:

coordinates[0][coordinates[0].length] = values[i]; 

あなたが使用することができます:

coordinates[0][(int)Math.round(i/2.0)] = values[i]; 

(そしてもちろん、と同じcoordinates[1]...

編集 これはもちろん醜いです:

(int)Math.round(i/2.0)

しかし、私が使用するソリューションは、理解するのがはるかに簡単ではありません。

i>>1

これは右シフト演算子であり、まさにここで必要な種類のものであり、他のどのアプローチよりも高速です...

結論:これはライブシナリオで使用されます:

使用する

coordinates[0][i>>1] = values[i]; 

EDIT2 毎日新しいことを学ぶ...

これは同じくらい良いですが、少し遅いかもしれません。

coordinates[0][i/2] = values[i]; 
于 2012-10-16T10:04:13.560 に答える
1

あなたがあなたが間違いなくvaluesあなたがすることができる偶数を持っていることを知っているなら

for(int i = 0; i < values.length / 2; i++) {
  coordinates[0][i] = values[2*i];
  coordinates[1][i] = values[2*i + 1];
}
于 2012-10-16T10:05:29.060 に答える
0

最後の位置をどこかに保存する必要があります。.length配列のサイズを示します。

配列内の位置は常に半分になりiます(要素の半分を一方の配列に配置し、残りの半分をもう一方の配列に配置するため)。

String[] values = split(line, ",");
int[][] coordinates = new int[2][values/2];

for(int i = 0; i < values.length; i++) {
  if(i % 2 == 0) { //THIS IS EVEN VALUES AND 0
    coordinates[0][ i / 2] = values[i];
  } else { //THIS IS ODD VALUE
    coordinates[1][ i / 2 + 1 ] = values[i];
  }
}
于 2012-10-16T10:00:22.310 に答える
0

javaの配列インデックスは、「0」から「配列の長さ-1」までです。

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

配列内の各項目は要素と呼ばれ、各要素はその数値インデックスによってアクセスされます。上の図に示されているように、番号付けは0から始まります。したがって、たとえば、9番目の要素はインデックス8でアクセスされます。

于 2012-10-16T10:03:33.810 に答える
0

なぜだめですか:

String[] values = split(line, ",");
int[][] coordinates = new int[2][values/2];
for(int i = 0; i < values.length; i+=2) {
      coordinates[0][i/2] = values[i];
      coordinates[1][i/2] = values[i+1];

}
于 2012-10-16T10:21:45.680 に答える