• 締切済み

ArrayListでの要素の取り出し

Javaについて質問です。 名前順にソートしたArrayListのある要素だけを取り出して、 DefaultListModelに追加していきたいのですが、 book = new AddressBook(); book.add(new Address(太郎,住所,電話番号,メールアドレス)) book.add(new Address(花子,住所,電話番号,メールアドレス)) この例で、1番目の要素の名前だけ取り出すにはどうすればいいのでしょうか。 model.clear(); book.shellSort(); for(int i = 0; i < book.size(); i++){ String[] field = (String)book.get(i).split(",");//←ここでエラーになります。 model.addElement(field[0]); } ObjectとStringの扱いが分からず立往生です… 回答お待ちしております。

みんなの回答

  • momenlara
  • ベストアンサー率60% (6/10)
回答No.4

最近のJavaは知らないのですが、 Java1.5以降とそれ以前ではArrayListの仕様も違うみたいですね。 いずれにしても、AddressBookクラスとAddressクラスの実装が分からないので、 以下は若干の想像を含みます。 まず、ArrayListにAddressクラスのオブジェクトをaddしたならば、 getで得られるオブジェクトもAddressクラスのオブジェクトになると思います。 そしてAddressクラスから1番目の要素の名前だけ取り出すには、 そのためのメソッドがAddressに用意されている必要があります。 例えばこんな感じ。 (もしかしたらC++な文法になっているかも。コンパイルできるかは未確認です) class Address { public String name() { return myName; } private String myName; } 名前を取り出すname()メソッドを使って、 ループ処理をするとしたらこんな感じになるでしょうか。 (ここでは名前をコンソールに表示しています) for (int i=0; i<book.size(); i++) { Address addr = book.get(i); println(addr.name()); } もう少しオブジェクト指向について、べんきょうする必要があるかもしれません。 ある程度、時間はかかりますが、一度わかってしまえばいくらでも応用がききます。 あきらめずにがんばってくださいね。

参考URL:
http://www.javadrive.jp/start/arraylist/
全文を見る
すると、全ての回答が全文表示されます。
noname#181603
noname#181603
回答No.3

おそらく Adress オブジェクトをString にキャストできそうにないです。 したがって book.get(i)でStringオブジェクトが返らない限りだめでしょう。コードを全部表示したらどうでしょう。

satotsu777
質問者

補足

AddressBook内のgetメソッドで値をtoString()で変換したら出来ました! ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
noname#181603
noname#181603
回答No.2

キャストのあたりかもしれません。 String[] field = ((String)book.get(i)).split(","); (Generics を使うとキャストしなくていいけど)

全文を見る
すると、全ての回答が全文表示されます。
noname#181603
noname#181603
回答No.1

エラー名はなんでしょうか?

satotsu777
質問者

補足

AddressBookGUI.java:286: シンボルを見つけられません。 シンボル: メソッド split(java.lang.String) 場所 : Address の クラス String field = (String)book.get(i).split(","); ^ エラー 1 個 です。 調べながら作っていて、getメソッドで具体的に何を指すのかもわかっていません…

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ArrayListからの要素の取り出しについて

    質問いたします。 下記コードの目的は Textクラス内でTest.txtの読み込み・表示を行います 次にErrorクラス内では 【errorRead() 】Testクラスで発生する可能性があるエラーを記載したError.txtよりその内容を読み取りその内容をArrayListクラスのerrorListオブジェクトに格納しておきます。 【setErrorMsg】ではerrorListに格納された要素から必要なエラー表示を取り出す処理をしています。 質問は各クラスのメソッドで起こったエラーをキャッチした場合【setErrorMsg】メソッドへ対応する要素の番号を渡し、errorListよりgetメソッドを使い要素を取得しTestクラス内のcatch部分でその内容を表示させたいのですが、表示の仕方が良くわかりません。 class Test{ public static void main(String[] args){ try{ メソッドの呼び出し }catch(FileNotFoundException fnfe){ エラー内容の表示 }catch(IOException ie){ エラー内容の表示 } } class abc{ public voidTextRead() throws FileNotFoundException, IOException{ try{ 外部ファイルaaa.txtの読み込み、DOS画面への表示処理 }catch(FileNotFoundException){ error.setERROR_MESSAGE(0); }catch(IOException){ error.setERROR_MESSAGE(1); } } class Error{ public void errorRead() throws FileNotFoundException, IOException{ ArrayList errorList = new ArrayList(); try{ BufferedReader br = new BufferedReader(new FileReader("Error.txt")); while((errorStr = br.readLine()) !=null){ errorList.add(errorStr); } br.close(); }catch(FileNotFoundException fnfe){ setERROR_MESSAGE(3); }catch(IOException ie){ error.setERROR_MESSAGE(4); } public int setErrorMsg(int count){ errorList.get(count); return count; } } 宜しくお願い致します。

    • ベストアンサー
    • Java
  • ArrayListを使った多次元配列の作成について

    ArrayListで可変長配列を扱っているのですが、 2次元可変長配列を用いる必要が出てきたので、 下記のように変更したのですがうまくいきません。 何が悪いのか教えていただけませんでしょうか? ----------------------------------------- ArrayList cars=new ArrayList(); cars.add("フェラーリ"); cars.add("ポルシェ"); cars.add("メルセデスベンツ"); for(int i=0;i<cars.size();i++){  String str=(String)cars.get(i);  System.out.println(str);} ----------------------------------------- 上記から下記のように変更しました。 ----------------------------------------- ArrayList[] cars=new ArrayList[3]; cars[0].add("フェラーリ"); cars[0].add("ポルシェ"); cars[0].add("メルセデスベンツ"); for(int i=0;i<cars[0].size();i++){  String str=(String)cars[0].get(i);  System.out.println(str);} ----------------------------------------- エラーは「Exception in thread "main" java.lang.NullPointerException」です。 どうやら初期配列が10ではなく3となってしまっているようです。

    • ベストアンサー
    • Java
  • ArrayList で配列を扱う場合の記述方法について

    ArrayList で配列を扱う場合の記述方法について、 探しきれないのでご教授お願いします。 ArrayList list = new ArrayList(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(i+"は"+list.get(i)); } という箇所をArrayList<Date>listを使って書き直すのはどのようになるでしょうか。 ArrayList<Date>list= new ArrayList<Date>(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(i+"は"+list.get(i)); } とすると、 型 ArrayList<Date> のメソッド add(Date) は引数 (String) に適用できません。 というエラーになってしまいました。

    • ベストアンサー
    • Java
  • [C#]Arraylistに追加した構造体の内容の変更

    struct Hoge {     public string name;     public string address; } ArrayList list = new ArrayList(); Hoge test = new Hoge(); test.name = "あいうえお"; test.address = "123"; list.Add(test); test.name = "かきくけこ"; test.address = "456"; list.Add(test); //ここから //list[0].name = "さしすせそ"; のように追加するコードを書きたいです //ここに for (int i = 0; i < List.Count; i++) {     MessageBox.Show((Hoge)List[i]).name.ToString()); } これで、 list[0]のnameには"あいうえお" list[1]のnameには"かきくけこ" が、代入されていますが list[0]のnameをArrayListに追加したあとに変更したいのです。 このままだと、「あいうえお」「かきくけこ」と表示されますが、 「さしすせそ」を途中でlist[0]の代入して、 「さしすせそ」「かきくけこ」と表示したいのです。

  • ArrayListはオブジェクトのポインタを渡している?

    ArrayListはオブジェクトのポインタを渡している? 例えば、一つのメソッド内に以下のように書くと、出力は最下部のようになります。 listに入れたモデルを取り出さずにModelを変更しても、listに入れたモデルを変更したのと同じことが出来ています。 C言語で言うところの(Cはあまり覚えていませんが…)、ポインタを渡しているようなイメージになるのでしょうか? --コード-- Model model1 = new Model("model1"); Model model2 = new Model("model2"); ArrayList list = new ArrayList<Model>(); list.add(model1); list.add(model2); showList(list); model1.setName("model1_"); showList(list); --出力-- model1 model2 model1_ model2

    • ベストアンサー
    • Java
  • ArrayListを改良したい

    visual C# 2010 Express を使用しています。 ArrayListは動的に要素を追加できるの便利なのですが、 次のような使い方で要素を取り出そうとするとasキャストが必要になってしまいます・・・ class Data : Dictionary<string, string> { } class DataList : ArrayList { public void Add(Data value) { base.Add(value as Data); } } class Program { static void Main(string[] args) { var d = new Data(); d["a"] = "aa"; d["b"] = "bb"; DataList arr = new DataList(); arr.Add(d); // var dd = arr[0] as Data; var dd = arr[0]; Console.WriteLine(dd["a"]);// エラー 角かっこ [] 付きインデックスを 'object' 型の式に適用することはできません。 Console.ReadLine(); } } そこでというか、ラップした独自のクラスを作りたいと思い上のような感じで作成したのですが、 やはり同じエラーになってしまいます・・・ asキャストを必要とせず、そのままDataクラス(Dictionary<string, string>)を 取り出すためにはどのように作成したら良いのでしょうか?

  • ArrayListのcloneメソッド

    お世話になります。 ArrayListのcloneメソッドなんですが、API上は「ArrayList のインスタンスのシャローコピーを返します。要素自体はコピーされません。 」と記載がありますが、 「ディープコピー」をしているような感じがして、なぜ「シャローコピー」と言っているのか、教えて欲しいです。 しかも、要素自体もコピーされているような…。 自分の理解では、 シャローコピー:コピー元、コピー先で同じオブジェクトを参照する ディープコピー:コピー元、コピー先で違うオブジェクトを参照する 試したソースは以下です。 --------------- import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayList<String> array = new ArrayList<String>(); array.add("a"); array.add("b"); ArrayList<String> array2 = (ArrayList<String>) array.clone(); array2.add("c"); System.out.println("array:" + array); System.out.println("array2:" + array2); } } --------------- cloneメソッドはシャローコピーなので、array2で「c」がaddされたら、arrayも「c」が追加されて、 array:[a, b, c] array2:[a, b, c] となるはずが、 array:[a, b] array2:[a, b, c] となります。 array、array2は別々のオブジェクトを参照しているような気がします。 恐らく大きな勘違いをしているのかもしれませんが、 調べてもいまいち理解できませんでした。 お手数おかけしますが、よろしくお願い致します。

    • ベストアンサー
    • Java
  • VC++ .net のArrayListについて

    教えてください。 環境: VC++ .net 2003(Framework) 内容: ArrayListについて質問があります。 <.cpp> : : ArrayList* Al = new ArrayList(); samObj obj = new samObj(); obj->set_aaaa(S"うまくいかないよ"); Al.Add(obj); Console::WriteLine(Al->get_item(i)->get_aaaa()); : : <.h> (sam_objctの中身) : : __property void set_aaaa(String* value){mstraaaa = value->Trim();} __property String* get_aaaa(){ return mstraaaa->Trim(); } : : 上記のようにsam_objctに入れたものをitem(i)を使って呼び出したのですが、Alにはaaaaプロパティは存在しません。記述方法が違っているのでしょうか? VBやC#やMFCでは出来たと思っていたのですが・・・・

  • C#.NET ArrayListの使用方法について

    C#.NETを使用しています。ArrayListを宣言、インスタンス化し、 "別々の値を持つ"要素20個をAdd(追加)しているはずなのですが、 要素を取り出して、値を見てみると"同じ値"になってしまっています。 自分なりに考えたのですが原因がわかりません。 どなたかご教授お願いします。 書いたソースは以下のような感じです。 public class Area{ _____// リスト _____public ArrayList list; _____//コンストラクタ _____public Area(){ _________ list = new ArrayList(); __________//要素の作成は以下で行う __________for(int cnt=0;cnt<20;cnt++){ ___________ AddNodeList(new 要素); } _____} _____public void AddNodeList(要素){ _______要素型 a = 要素; _______list.Add(a); _____} }

  • ArrayListクラスを利用するプログラムについて質問があるのですが。

    「Genericsを用いたArrayListを使用しループ処理にはiteratorを使用する。 という指定の下、 ArrayListのインスタンスを生成し次の5つの文字列を追加した後、 for文を使ってリストの中身を全て順番に画面表示したいんです。 "AA" "BB" "CC" "DD" "EE" --------------------------- import java.util.ArrayList; class TestA{ public static void main(String args[]) { ArrayList<String> array = new ArrayList<String>(); array.add("AA"); array.add("BB"); array.add("CC"); array.add("DD"); array.add("EE"); } } --------------------------- ここからよく解らないので教えていただけませんでしょうか?

    • ベストアンサー
    • Java