今天是中秋节,不仅没有啥可喜的事儿,反而自己把自己搞的感冒了,现在有点病怏怏的感觉。本来计划纯粹睡一天的,但是考虑到晚上可能会睡不着我就来实验室看看电影~~既然左右无事就继续把没写完的东西写完~~开始技术!
下面是上次给出的练习:
1.Define an interface called IAnimal,it has following behavior -talk(); -walk(); -fly(); each animal will also have a Name property.
2.Implement 3 classes named Tiger,Bird,Duck,all implement IAnimal.
3.Implement a class called Zoo, it sha following behavior
- getTenAnimal() ->return 10 animals filled radndomly 3 kinds of animals
-getFlyAnimal() ->accept an animal list,and return an animal list which contains only animals can fly(like bird)
-orderAnimal() ->accept an animal,and return animals in name order.
记忆力没错的话,我已经将1.2.实现,3中的第一个函数getTenAnimals()也已经写出,现在接着写第二个函数。
第二个函数就是要实现接受一个animal list ,返回属于bird的animal list。那么利用list中的class.equal即可实现。
代码如下:
public List<Bird> getFlyAnimals(List<IAnimal> list)throws NullPointerException{
List<Bird> birds = new ArrayList<Bird>();
for (int i = 0; i < list.size(); i++) {
if( list.get(i).getClass().equals(Bird.class)){
birds.add((Bird)list.get(i));
// System.out.println(list.get(i).getClass().getName());
}
}
return birds;
}
还有最后一个函数orderAnimal(),根据Name将Animal排序,如果只是简单的将Names排序,数组里有Arrays.sort(judgeNames); 即可将Names由低到高的排序,但这里同时需要将Animal类型排序。所以解决方法就是根据名字比较,但是是将Animals类排序。代码如下:
public List<IAnimal> orderAnimals(List<IAnimal> list){
ArrayList<String> arrayList = new ArrayList<String>();
System.out.println("接受到的名字:");
for(int i=0;i<list.size();i++){
String naString;
if( list.get(i).getClass().equals(Bird.class)){
Bird bird=(Bird)list.get(i);
naString=bird.getName();
}else if(list.get(i).getClass().equals(Duck.class)){
Duck duck=(Duck)list.get(i);
naString =duck.getName();
}else{
Tiger tiger=(Tiger)list.get(i);
naString=tiger.getName();
}
arrayList.add(naString);
System.out.println(arrayList.get(i)); //打印出接收到的animal名字
}
for(int i=0;i<arrayList.size()-1;i++){ //开始排序
for(int j=i+1;j<arrayList.size();j++){
String temp="";
if(arrayList.get(i).compareTo(arrayList.get(j) ) >=0 ){
IAnimal animal= list.get(i);
IAnimal animal2=list.get(j);
list.set(j, animal);
list.set(i, animal2);
temp=arrayList.get(j);
arrayList.set(j, arrayList.get(i));
arrayList.set(i, temp);
}
}
}
System.out.println("排序后的结果:");
for(int i=0;i<arrayList.size();i++){
System.out.println(arrayList.get(i)); //输出排序后的结果
}
return list;
}