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
















發佈了30 篇原創文章 · 獲贊 14 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章