- PR -

Vectorクラスの使用方法について

1
投稿者投稿内容
NOKKO
会議室デビュー日: 2005/09/06
投稿数: 6
投稿日時: 2005-09-06 13:45
Vectorクラスの勉強のため以下の2つのクラス(cAnaSecs2,cDataSecs2)を作成して
cAnaSecs2のmain()を実行しました。

public class cAnaSecs2 {
Vector tblData;
public cAnaSecs2(){
tblData = new Vector();
cDataSecs2 cData;

cData = new cDataSecs2("1",1,"a");
tblData.addElement(cData);
System.out.println("Address:"+cData.GetAddressString()+
" Type:"+ String.valueOf(cData.GetType()) +
" Value:" + cData.GetValue());

cData = new cDataSecs2("1.1",2,"b");
tblData.addElement(cData);
System.out.println("Address:"+cData.GetAddressString()+
" Type:"+ String.valueOf(cData.GetType()) +
" Value:" + cData.GetValue());
}

public static void main(String[] args) {
cAnaSecs2 cAna = new cAnaSecs2();
cDataSecs2 cData;

cData = (cDataSecs2)cAna.tblData.elementAt(0);
System.out.println("Address:"+cData.GetAddressString()+
" Type:"+ String.valueOf(cData.GetType()) +
" Value:" + cData.GetValue());

cData = (cDataSecs2)cAna.tblData.elementAt(1);
System.out.println("Address:"+cData.GetAddressString()+
" Type:"+ String.valueOf(cData.GetType()) +
" Value:" + cData.GetValue());
}
}

public class cDataSecs2 {

private static Vector tblAddress; // アドレス
private static int intType; // タイプ
private static String strValue; // 値

public cDataSecs2(String Adr, int type, String value){
String strTemp;
StringTokenizer st = new StringTokenizer(Adr,".");

tblAddress = new Vector(1);
while( st.hasMoreTokens() ){
tblAddress.addElement(st.nextToken());
}
intType = type;
strValue = value;
}

public String GetAddressString(){
StringBuffer sbRet = new StringBuffer();

for (int i = 0; i < tblAddress.size(); i++ ){
if( i != 0){
sbRet.append(".");
}
sbRet.append(tblAddress.elementAt(i));
}
return sbRet.toString();
}
}

結果は以下のようになりました。

Address:1 Type:1 Value:a
Address:1.1 Type:2 Value:b
Address:1.1 Type:2 Value:b
Address:1.1 Type:2 Value:b

私としては、以下のような出力結果を期待したのですが...
Address:1 Type:1 Value:a
Address:1.1 Type:2 Value:b
Address:1 Type:1 Value:a
Address:1.1 Type:2 Value:b

cAnaSecs2クラスのコンストラクタでVector型のフィールドtblDataにcDataSecs2型のオブジェクトを2つ登録したのですが、
取り出してみたら両要素とも後に登録したオブジェクトが取得出来てしまいました。

Vectorクラスへの登録・Vectorクラスからのオブジェクト取得どちらかが間違っていると思われるのですが、
原因がどうしてもわかりません。
わかる方がおられましたら是非教えて頂きたいのですが。
宜しくお願いします。
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2005-09-06 14:02
class cDataSecs2 内の、「private static」を「private」に直してください。
tblAddress, intType, strValue の値が全インスタンスで共有されちゃってます。

NOKKO
会議室デビュー日: 2005/09/06
投稿数: 6
投稿日時: 2005-09-06 14:06
スフレさん。ありがとうございました。

スレッドを立ててからも調査していて気づいてしまいました。
すごく初歩的なミスで恥ずかしいです。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)