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

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

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());
	}
}
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值