• 締切済み

java名簿管理プログラム

以下の名簿管理プログラムで削除と名前の辞書順ソートのメソッドの作り方を教えていただけませんか? public class Meibo{ private Vector vec; public Meibo(){ vec=new Vector(); } public void insert(Person p){ vec.add(p); } public void delete(String name){ } public void sort(){ } /* PersonオブジェクトではStringで名前を、intで年齢を定義し入力しています */ かなり局部的にしか載せていないので非常に分かり難いとは思いますがどうかよろしくお願いします。

みんなの回答

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.4

ソートに関してです。 #2の方はjava.lang.Comparableを紹介されていますが、 この方法は、 1.レコードとなるオブジェクトにComparableを実装していなければならない。 2.オブジェクトにソート条件を実装するため、昇順や降順などソート条件を変化させる場合のコードが面倒。 ということがあります。 私がお勧めするのは、java.util.Comparatorを実装する方法です。 やり方は、int compare(Object a, Object b)を実装したクラスを作ってCollections.sort(List, Comparator)に渡します。 Class SortLogic { public int compare(Object a, Object b){   //ここに比較条件を記述します。   //aが小さければマイナス、大きければプラス、同じなら0を返します。 } } あとは、 Collections.sort(vector, new SortLogic()); とすれば完了です。

123eco
質問者

お礼

ご回答ありがとうございます。 まだ出来ていないので早速試してみたいと思います。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>どこが間違えているのか 文字列の並びが同値かどうかは、 equals を使います ==を使うとオブジェクトの同値かどうかを調べることになります。

123eco
質問者

お礼

BLUEPIXY様 2度のご回答どうもありがとうございます。 equalsを使って早速試してみたいと思います。 どうもありがとうございました。

  • osumitan
  • ベストアンサー率33% (102/307)
回答No.2

削除は、Vectorのremoveメソッドを使います。   remove(int index) なら、要素のインデックスを指定します。   remove(Object o) なら、要素そのものを指定します。    (厳密にはequalsメソッドの戻りがtrueになるものが削除されます) 削除する条件から、番号か、要素自体を特定してください。 ソートは、java.util.Collectionsのsortメソッドを使います。   Collections.sort(vec); ただし、vecの要素(この場合Personクラス)がjava.lang.Comparableを 実装している必要があります。 そして、public int compareTo(Object o)メソッドを作成する必要があります。 引数は比較対象のインスタンス(通常は同じ型)が渡されます。 ソート条件により、自分自身が前なら<0、同じなら0、後なら>0を返します。 以下は、名前の昇順+年齢の昇順の条件でソートする例です。   public class Person implements Comparable {    private String name;    private int age;    public int compareTo(Object o) {     Person cmp = (Person)o;     int cmpname = this.name.compareTo(cmp.getName());     if(cmpname != 0) {      return cmpname;     }     return this.age - cmp.getAge();    }    public String getName() {     return this.name;    }    public int getAge() {     return this.age;    }   } StringもcompareToを実装しているので、compareToが使えます。 結果は、先頭から1文字ずつ比較していく形になります。

123eco
質問者

補足

ご丁寧な回答ありがとうございました。 ただremoveについてですが、参考にさせて頂いて public void delete(String na){ for(int i=0;i<vec.size();i++){   Person p=(Person)vec.elementAt(i) if(p.name==na)    vec.remove(i); } } というメソッドを作ったのですがremoveされません・・・。全く見当違いな事をしているのかもしれませんが、どこが間違えているのか教えていただけませんか?よろしくお願いします。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

vectorの並び替えについては、参考URLが参考になると思います。 deleteについては、とりあえず、順番にvectorの保持するデータをみていってそのインデックスで vec.remove(インデックス); で削除します。

参考URL:
http://okweb.jp/kotaeru.php3?q=1458219

関連するQ&A