think in java第十一章持有对象 习题答案

来源:互联网 发布:bgm网络语什么意思 编辑:程序博客网 时间:2024/06/05 09:53

持有对象:就是创建一个属性,只不过此处是创建对象,利用持有对方的引用来访问类的成员变量。

1.创建一个新类Gerbil(沙鼠),包含intgerbilNumber,在构造器中初始化它(类似于本章的Mouse示例)。添加一个方法hop(),用以打印沙鼠的号码以及它正在跳跃的息。
创建一个ArrayList,并向其中添加一串Gerbil对象。使用get()遍历List,并且对每个Gerbil调用hop()。
public class Gerbil {private int gerbilNumber;public int getGerbilNumber() {return gerbilNumber;}public void setGerbilNumber(int gerbilNumber){this.gerbilNumber = gerbilNumber;}public Gerbil(int gerbilNumber) {setGerbilNumber(gerbilNumber);}private void hop() {System.out.println("gerbilnumber = " + gerbilNumber);}public static void main(String[] args) {ArrayList<Gerbil> gerbilList = new ArrayList<Gerbil>();gerbilList.add(new Gerbil(1));gerbilList.add(new Gerbil(3));gerbilList.add(new Gerbil(5));gerbilList.add(new Gerbil(7));for (Gerbil gerbil : gerbilList) {gerbil.hop();}}}

2.修改SimpleCollection.java,使用Set来表示c。

public class SimpleCollection{public static void main(String[] args) {Set<Integer> c = new LinkedHashSet<Integer>();int i = 0;while (i < 20) {c.add(i++);}for (Integer integer : c) {System.out.print(integer + " ");}}}

3.略
4.创建一个生成器类,它可以在每次调用其next()方法时,产生你由你最喜欢的电影的字符构成的名字(作为String对象)。
在字符列表中的电影名用完之后,循环到这个字符列表的开始处。使用这个生成器来填充 数组、ArrayList、LinkedList、
HashSet、LinkedHashSet和TreeSet,然后打印每一个容器。

public class Generator {int key = 0;public String next() {switch (key) {default:case 0:key++;return "山丘";case 1:key++;return "漂洋过海来看你";case 2:key++;return "鬼迷心窍";case 3:key++;return "我是真的爱你";case 4:key++;return "凡人歌";case 5:key++;return "我是一只小小鸟";case 6:key=0;return "再回首";}}public void fill(String[] s) {//填充数组for(int i = 0; i < s.length; i++){    s[i] = next();} }public Collection<String> shift(Collection<String> c,int n){for (int i = 0; i < n; i++) {c.add(next());}return c;}public static void main(String[] args) {Generator generator = new Generator();String[] s = new String[7];generator.fill(s);for (String str : s) System.out.println(str+" ");System.out.println(generator.shift(new ArrayList<String>(), 7));System.out.println(generator.shift(new LinkedList<String>(), 7));System.out.println(generator.shift(new HashSet<String>(), 7));System.out.println(generator.shift(new LinkedHashSet<String>(), 7));System.out.println(generator.shift(new TreeSet<String>(), 7));}}
5、6、7.略
8.修改练习1,以便调用hop()时使用Iterator遍历List.

public class Gerbil {private int gerbilNumber;public int getGerbilNumber() {return gerbilNumber;}public void setGerbilNumber(int gerbilNumber){this.gerbilNumber = gerbilNumber;}public Gerbil(int gerbilNumber) {setGerbilNumber(gerbilNumber);}public void hop() {System.out.println("gerbilnumber = " + gerbilNumber);}public static void main(String[] args) {ArrayList<Gerbil> gerbilList = new ArrayList<Gerbil>();gerbilList.add(new Gerbil(1));gerbilList.add(new Gerbil(3));gerbilList.add(new Gerbil(5));gerbilList.add(new Gerbil(7));Iterator it = gerbilList.iterator();while(it.hasNext()){((Gerbil) it.next()).hop();}}}
9、10.略

11.写一个方法,使用Iterator遍历Collection,并打印容器中每个对象的toString().  填充各种类型的Collection然后对其使用此方法  

public class Iterator { public static void traverse(Collection c){      Iterator it = c.iterator();      while(it.hasNext())          System.out.print(it.next()+ " ");      System.out.println();   } public static void main(String[] args) {//省略LinkedList、HashSet、TreeSet、LinkedHashSet ArrayList<Integer> al = new ArrayList<Integer>(Arrays.asList(1,2,3));  traverse(al);}}

14.取List的中间坐标,在插入时通过list.size/2 获取List的中间坐标,之后插入。

17.使用练习1中的Gerbill类,将其放入Map中,将每个Gerbil的名字(例如Fuzzy或Spot)String(键) 与每个Gerbil(值)关联起来。为KeySet()获取Iterator,使用它遍历Map,针对每个"键"查询 Gerbil,然后打印出  "键",并让gerbil执行hop()。

public class Gerbil {private int gerbilNumber;public int getGerbilNumber() {return gerbilNumber;}public void setGerbilNumber(int gerbilNumber){this.gerbilNumber = gerbilNumber;}public Gerbil(int gerbilNumber) {setGerbilNumber(gerbilNumber);}public void hop() {System.out.println("gerbilnumber = " + gerbilNumber);}public static void main(String[] args) {Map<String,Gerbil> gerbilMap = new HashMap<String,Gerbil>();gerbilMap.put("1", new Gerbil(1));gerbilMap.put("2", new Gerbil(3));gerbilMap.put("3", new Gerbil(5));gerbilMap.put("4", new Gerbil(7));Iterator it = gerbilMap.keySet().iterator();while(it.hasNext()){String s = (String) it.next();System.out.println(s+" ");gerbilMap.get(s).hop();}}}

27.写一个称为Command的类,它包含一个String域和一个显示该string的operation()方法。
写第二个类,它具有一个使用Command对象来填充一个Queue并返回这个对象的方法。
将填充后的Queue传递给第三个类的一个方法,该方法消耗掉Queue中的对象,并调用他们的operation()方法。

class Command{//第一个类String str;public Command(String str) {this.str = str;}void operation() {System.out.println(str);}}class Second{//第二个类Queue<Command> makeQ() {  Queue<Command> que = new LinkedList<Command>();for(int i = 0; i < 5; i++)que.offer(new Command(i+" "));return que;}}public class Test{//第三个类public static void temp(Queue<Command> qc) {          while(qc.peek() != null)              qc.poll().operation();      } public static void main(String[] args) {Second s = new Second();temp(s.makeQ());}}
















原创粉丝点击