先抱怨一下,最近真的是忙屎了,并不是忙的没时间吃饭睡觉,其实休闲的时间也很多,就是事儿好几件不能让心静下来。狠心花很多钱报了个驾校以为最早也要两个打完卡后两星期才能吃饭,结果这个星期四就让我去考试,我知道可以的题不会太难,但也得下功夫去看完1229道题,我可不想科一补考;同时并行的事就是国奖申请,我分数不是很高,但课外的比赛较多,额外的加分项可能有点,虽是酱油瓶的节奏,但也申请了,结果一申请麻烦事儿就是来了,申请请一天下午师兄在兰大有个面试,相关资料我自己无法搞,第二天是申请的截止日期,结果我早早去考科一,师兄又早早的去面试,哎,我们和老师通了好几次电话才允许我们下午再交,好在有惊无险。
好了,开始技术。这个Java编程题是一个朋友给我的(一个很优秀的朋友,有机会真希望见她一面)题目比较简单,适合普通的编程练习。题目如下:
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.
You can implement the program in following programing languages (Python/java.....)
这就是全部的题,标注一下:现在是2015/9/25.指明时间,以防以后麻烦。
step1.做这个第一步肯定是构建interface,写这个很容易。
public interface IAnimal {
//public String Name=null;
public abstract void talk();
public abstract void walk();
public abstract boolean fly();
}
我在这里就犯了个错误,读题的时候看到each animal will also have a Name property,以为也是在interface里面写,但调用的时候发现Name无法复制,那是因为在interface中所有属性都默认是static final,这是因为 接口是一个契约,
是所有实现类必须并且是共同遵守的. 试想, 如果接口中的属性值不是final的, 可以任意的更改, 那这个属性定义在接口中就毫无意义, 因为它违反了 这个必须"共同遵守的契约" 同样,如果接口中的属性性不是static的,
仅仅只是final的, 每个实现类都保存了一个同样的属性值, 这完全没有必要, 除了占用类型之外, 没有其它任何意义. 所以, 只有属性值是static, final的, 才符合接口的设计原则。不要傻傻的去在interface里定义Name属性。
step2: 接下来就是写三个动物的类,需要说明的是最好将Names属性写为private,然后使用getNames(); setNames()组合来获取设置Names
public class Tiger implements IAnimal{
private String name;
public Tiger(){
}
public Tiger(String name){
this.name=name;
}
public void talk() {
// TODO Auto-generated method stub
System.out.println("tiger can talk");
}
@Override
public void walk() {
// TODO Auto-generated method stub
System.out.println("tiger can walk");
}
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("tiger can't fly");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
其余代码和这个差不多。
step3:接下来我感觉就是比较难的了,要随机产生10个三种类的动物。一个比较简单的方法就是循环10次,每次随机产生一种动物。随机产生动物的随机方法就是先产生0-2的随机数,然后判断
/*
* for(int i=0;i<10;i++){
int kind=r.nextInt(3);
int j=r.nextInt(10);
if(kind==0) 生成Tiger;
if(kind==1) 生成Duck;
if(kind==2) 生成Bird;
}
*/
我个人感觉这个随机方法很不错!那么写代码的时候,需要用到list。所以具体代码如下:
public List<IAnimal> getTenAnimals(){
List<IAnimal> list = new ArrayList<IAnimal>();
Random random=new Random();
int kind;
IAnimal iAnimal;
for(int i=0;i<10;i++){
kind= random.nextInt(3);
if(kind==1){
iAnimal=new Tiger();
list.add(iAnimal);
}
if(kind==2){
iAnimal=new Duck();
list.add(iAnimal);
}
else{
iAnimal=new Bird();
list.add(iAnimal);
}
}
return list;
}
这样子第一个函数的功能就是实现了。
下面俩函数在下一篇博客里实现。