こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Vectorクラスの使い方

いつもお世話になっております。
Vector vector = new Vector();
String array[] = new String[11];
vector.addElement(array)

for( int i = 0; i1 < vector.size(); i++)
{
String str = (String)vector.get(i);System.out.println(str);

11の配列にデータ(String)を入力し(ここでは省略)、11すべてをVectorへいれ、String型で取り出したいのですがエラーになります。
System.out.println(vector1.get(i));だと文字化けします。
アドバイスお願いします。そういったことを書いてあるサイト等ご存知でしたらお願いします。

投稿日時 - 2005-06-15 13:49:28

QNo.1450806

すぐに回答ほしいです

質問者が選んだベストアンサー

>11の配列にデータ(String)を入力し(ここでは省略)、11すべてをVectorへいれ、String型で取り出したいのですがエラーになります。

>しかしながらどうしてもうまくいきません・・

>試していますがうまくいきません。

>勉強になりました。しかしながらまだうまくいきません。


エラーが出るのなら、エラーの内容を書きましょう。
「うまくいきません。」と書かれても、それを見たって何がどううまくいかないのか分かりません。

それにもしかしたら質問者さんが
「うまくいかない。」
と思っているだけで、javaとしては正しい動きをしているかもしれません。

質問の仕方として、
・どうしたい。
・実行した内容。可能ならばソースをつける。
・実行結果。エラーが出るならエラーの内容を全てつける。
・自分で試したことがあるのならその内容と結果。
・自分の環境(OS、javaのバージョン、ミドルのバージョンなど)

#個人的には
#「お礼」で「ありがとうございました。できました。」
#と書くよりは解決した内容をまとめて書いて
#同じように悩んでいる人の助けになるようにするのがいいと思う。


では本題。
>11の配列にデータ(String)を入力し(ここでは省略)、
>11すべてをVectorへいれ、String型で取り出したい
ということなので、きっと
vecotr.get(1);
とすると
array[1]
の文字列が取得したいんですよね?

以下上記仮定より
配列arrayの全要素をvectorにセットするには
for(int i = 0;i < array.length;i++){
  vector.add(array[i]);
}
とします。
逆に文字列をvectorから取り出して表示するには
for(int i = 0;i < vector.size();i++){
  System.out.println(""+i+"番目の要素:["+(String)vector.get(i)+"]");
}
とします。

で、JAVAのAPIは読みましたか?
読んでいただくと分かると思いますが、
Vectorクラスのget(int i)メソッドで返ってくるのは
Object
です。
ですので文字列として扱いたいのならStringにキャストしてあげないといけません。
(いや、暗黙的にtoString()が呼ばれるか?あっ、でも配列オブジェクトとして突っ込んでるから、文字化けに見えるのか。)

これまたAPIを読んでいただくとわかるのですが、
VectorクラスのaddElement(Object obj)メソッド

指定の要素を最後に追加し…
なので、引数のobjは「1つの要素」として扱われます。
addElementの引数にarrayを指定すると、Vectorの最後番目に「配列まるごと」を入れていることになります。
ですので取り出すときには#3さん、#2さんの仰るようにString配列にキャストしてあげないといけません。

以上長々と失礼しました。

投稿日時 - 2005-06-15 23:02:21

お礼

pcbeginner様、アドバイスありがとうございました。
JAVAのAPIを読んで自分なりに納得しました。
ClassCastException がエラーとして表示されていました。

質問の仕方が悪く申し訳ありませんでした。今後気をつけます。

投稿日時 - 2005-06-16 16:45:34

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

jch

vector.addElement(array);
for (int j = 0; j < vector.size(); j++) {
String[] str = (String[]) vector.get(j);
for (int i = 0; i < str.length; i++) {
System.out.println(str[i]);
}
}
こんなに取得すればどうですか?

投稿日時 - 2005-06-15 16:03:48

お礼

jch様ありがとうございます。
勉強になりました。しかしながらまだうまくいきません。
現在デバック中です。
取り急ぎお礼まで

投稿日時 - 2005-06-15 16:51:15

ANo.2



Vector.addElement(String[])
だと、Vectorに入るのはString[]ではないの?
なので、取り出すときには、
String[] str = (String[])vector.get(0);
System.out.println(str[1]);
という風に、String[]型で取得して、入れた時の範囲を超えない配列番号でアクセスしないといけない。
配列の中身を自動でVectorのアイテムにしてくれるわけではないからね。あくまで、addElementした時の型で入っている。

投稿日時 - 2005-06-15 14:34:29

お礼

anmochi様ありがとうございます。
試していますがうまくいきません。
取り急ぎお礼まで

投稿日時 - 2005-06-15 16:21:21

ANo.1

Vector.addElement()の使い方が間違っています。

for(int index = 0; index < 11; index++) {
vector.addElement(array[index]);
}

細かく書かれていたのでもう正解書いちゃいますけど、どのように間違っていたのか、御自分でちゃんと理解してから進んでくださいね。

http://java.sun.com/j2se/1.4/ja/docs/ja/index.html
http://www.wakhok.ac.jp/~tatsuo/kougi99/
http://www.gimlay.org/~javafaq/

投稿日時 - 2005-06-15 14:26:21

お礼

keroro001様 早速ありがとうございます。
しかしながらどうしてもうまくいきません・・
うまくいきましたらご連絡します。

取り急ぎお礼まで。

投稿日時 - 2005-06-15 15:06:38