2

オブジェクトにフェッチおよび保存されたデータセットを印刷しようとしています。このオブジェクトはarraylistを使用します。データを取得している間(配列リストに追加する直前)、すべてのレコードは異なって印刷されますが、私がそれらを印刷するとき、それらは同じです。理由がわかりません。

これがコードです

void caseClicked()

{
  //println("Inside case clicked");

  for(int i = 0; i < mapData.size(); i++)
  {
    if (dist(mapData.get(i).pf.x, mapData.get(i).pf.y, gX, gY) < percentY(1))
    {
      clickedCaseId = mapData.get(i).icaseNum;
      clickedStateId = mapData.get(i).stateId;
      glyphPosX = mapData.get(i).pf.x;
      glyphPosY = mapData.get(i).pf.y;
      print("Value of icaseNum selected" + mapData.get(i).icaseNum + "\n");
      break;
    }
    else
      continue;
  }

  try{
          db.getConnection(); 
          if (db.conn.connect())
          {
            String tempQ = "select distinct(svin), vfatcount, saccdate, day " + d_year + " where icasenum = " + clickedCaseId + " and istatenum = " + clickedStateId;
            println(tempQ);
            db.conn.query(tempQ);
            Glyph tg1 = new Glyph();                 
            gl.fnVins.clear();
            while (db.conn.next()) 
            {
              tg1.fVin.VIN = db.conn.getString(1);
              tg1.fVin.fatals = (int)Float.parseFloat(db.conn.getString(2));
              println("Value of VIN is " + tg1.fVin.VIN + "\n");
              println("Value of fatals is " + tg1.fVin.fatals + "\n");

              gl.fnVins.add(tg1.fVin);
              gl.gdate = db.conn.getString(3);
              gl.gday = db.conn.getString(4);
            }

            for (int i = 0; i < gl.fnVins.size(); i++)
            println("Value of VIN is " + gl.fnVins.get(i).VIN + "\n");

          }
      }
      catch (Exception e)
      {      
          System.err.println ("Error:DBHelper.dataPointQuery - " + e.toString());
       //   return null;        
      }          
            db.closeConnection();


}

グリフクラスは

public class Glyph
{
  float caseNum = 0;
  float stateId = 0;
  float time = 0;
  int fatal = 0;
  String gday = "", gdate = "";

  class fnVin
  {
    int fatals = 0;
    String VIN = "";
  }

  fnVin fVin = new fnVin();
  ArrayList<fnVin> fnVins = new ArrayList<fnVin>();

}

誰かがこの実装の何が問題なのかを理解するのを手伝ってもらえますか?前もって感謝します。

4

2 に答える 2

0

問題は、whileループでgl.fnVinsに追加する前に新しいtg1.fVinインスタンスを作成しなかったことです。

gl.fnVins.add(tg1.fVin);

これを修正するには、whileループの配列に追加する前に新しいfnVinインスタンスを作成する必要があります。

while (db.conn.next()) {
    fVin fv = new fVin();
    fv.VIN = db.conn.getString(1);
    fv.fatals = (int)Float.parseFloat(db.conn.getString(2));              

    gl.fnVins.add(fv);
}
于 2012-11-08T01:58:26.087 に答える
0

ここ(クラス内)で同じfnVinオブジェクトを再利用し続けます:Glyph

Glyph.fnVin fVin = new Glyph.fnVin();

代わりに行うべきことは、最初にその行を削除してから、この変更されたループを使用することです。

while (db.conn.next()) 
{
    fnVin fVin = new fnVin();
    fVin.VIN = db.conn.getString(1);
    fVin.fatals = (int)Float.parseFloat(db.conn.getString(2));
    // println("Value of VIN is " + fVin.VIN + "\n");
    // println("Value of fatals is " + fVin.fatals + "\n");

    gl.fnVins.add(fVin);
    gl.gdate = db.conn.getString(3);
    gl.gday = db.conn.getString(4);
}

コードだけに基づいているかどうかはわかりませんが、内部クラスへの移動も検討することをお勧めしますgdate。また、このメソッドで新しいインスタンスを作成できるように、を作成する必要があります。gdayfVinfVinpublic class

于 2012-11-08T01:58:42.993 に答える