Vectorを用いた問題
JAVAをはじめたばかりなのですが、以下の問題が分かりません。
Lessonクラス内のaddメソッドにおいてaddした結果が常に学籍番号の小さい順にソートしたいのですが、どうもVectorの使い方がわからず四苦八苦しております。
import java.util.Vector;
class main {
public static void main(String argv[]){
Lesson l = new Lesson("Kokugo","Tanaka",100);
l.add(new Student("00005","Suzuki",100));
l.add(new Student("00002","Sato",64));
l.add(new Student("00003","Ito",43));
l.add(new Student("00007","Endo",92));
l.print();
}
}
class Lesson {
private String name; // 課題名
private String teacher; // 担当者
private int max; // 最大履修者数
private int num; // 登録履修者数
Vector<Student> st; // Student class の配列
public Lesson(String l,String t,int n){
name=l;
teacher=t;
max=n; num=0;
st=new Vector<Student>();// 配列の確保
}
public boolean add(Student s){
if(num>=max){ return false;}
else {
if(num==0){st.insertElementAt(s,num++);}
else{
for(int i=0;i<num;i++){
String p=(st.elementAt(i)).id;
if(p.compareTo(s.id)>=0){
st.insertElementAt(s,i);
}
}
}
return true;}
}
public void print() {
System.out.println("Lesson :"+name);
System.out.println("Teacher :"+teacher);
System.out.println("students:"+num);
for(int i=0;i<num;i++){
st.elementAt(i).print_short();
}
System.out.println();
System.out.println("----------");
}
}
class Student{
public String id; // 学籍番号
private String name; // 名前
private int grade; // 成績
Student(String i,String n, int g){
id=i;
name=n;
if(g<0)grade=0;
else if (g>100) grade=100;
else grade=g;
}
public void print_short() {
System.out.println(id+","+name+","+grade);
}
}
実行結果
Lesson :Kokugo
Teacher :Tanaka
students:1
00002,Sato,64
----------
学籍番号の順にソートしたいのですが、どうやら学籍番号の一番小さいものしか表示されていないようです。どのようにしたらよいのか教えていただけないでしょうか?
お礼
ご返答ありがとうございます。 なるほど、((Vector)x.get(0)).size()のような書き方も出来るのですね。 Vectorを使っているときはVectorクラスとObjectクラスをつい一緒くたに考えてしまいがちな気がするので、キャストするということはとても勉強になりました。 どうもありがとうございました。