![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
以下の名簿管理プログラムで削除と名前の辞書順ソートのメソッドの作り方を教えていただけませんか?
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で年齢を定義し入力しています */
かなり局部的にしか載せていないので非常に分かり難いとは思いますがどうかよろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
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());
とすれば完了です。
No.3
- 回答日時:
>どこが間違えているのか
文字列の並びが同値かどうかは、
equals
を使います
==を使うとオブジェクトの同値かどうかを調べることになります。
BLUEPIXY様
2度のご回答どうもありがとうございます。
equalsを使って早速試してみたいと思います。
どうもありがとうございました。
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文字ずつ比較していく形になります。
この回答への補足
ご丁寧な回答ありがとうございました。
ただ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されません・・・。全く見当違いな事をしているのかもしれませんが、どこが間違えているのか教えていただけませんか?よろしくお願いします。
No.1
- 回答日時:
vectorの並び替えについては、参考URLが参考になると思います。
deleteについては、とりあえず、順番にvectorの保持するデータをみていってそのインデックスで
vec.remove(インデックス);
で削除します。
参考URL:http://okweb.jp/kotaeru.php3?q=1458219
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java final 1 2022/06/10 22:49
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- C言語・C++・C# このプログラミング誰か教えてください。 2 2022/04/22 18:48
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サーブレットコンテキストの意...
-
servletからjspへオブジェクト...
-
エクセルVBA 画像を貼り付ける...
-
javaで、、、
-
getParameter()について
-
Javaでブラウザ判定
-
JSPでのArrayListの表示につい...
-
エクセルVBA/SpecialCellsで特...
-
C#で親にイベントを投げる方法
-
VB.netでメソッドからコントロ...
-
C#のクラスで値渡しをする
-
VB.NETでのnothing の意義について
-
Vba ListViewの行挿入に関して...
-
Dispose()は、どんな時に使うの...
-
Excel VBA 定数にオブジェクト...
-
コードの意味を解説して頂けな...
-
drawStringの座標について
-
VBAでの[]
-
String型からlong型への変換は...
-
ArrayListのデバッグ方法について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
servletからjspへオブジェクト...
-
VBAでの[]
-
サーブレットコンテキストの意...
-
エクセルVBA 画像を貼り付ける...
-
JSPでのArrayListの表示につい...
-
C#のクラスで値渡しをする
-
VB.netでメソッドからコントロ...
-
Excel VBA 定数にオブジェクト...
-
Vba ListViewの行挿入に関して...
-
javaで、、、
-
Dispose()は、どんな時に使うの...
-
VB.NETでのnothing の意義について
-
getParameter()について
-
String型からlong型への変換は...
-
JTableで値を右寄せ表示する方法
-
C#で親にイベントを投げる方法
-
Javaでブラウザ判定
-
VBスクリプトでテキストファイ...
-
PrintFormを使用してのプリント
-
UTF-8のテキストファイルを開く...
おすすめ情報