《數據結構與抽象:Java語言描述(原書第4版)》一練習
本節書摘來華章計算機《數據結構與抽象:Java語言描述(原書第4版)》一書中的第1章 ,第1.1節,[美]弗蘭克M.卡拉諾(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 羅得島大學 新英格蘭理工學院 辛運幃 饒一梅 譯 更多章節內容可以訪問雲棲社區“華章計算機”公眾號查看。
練習
1.說明程序清單1-3中給出的類PiggyBank的每個方法:說明方法的目的;描述它的參數;寫前置條件、後置條件和方法頭的偽代碼。然後寫一個用於這些方法的Java接口,包括javadoc風格的注釋。
2.假定groceryBag是一個包,它被表示不同雜貨名字的10個字符串填滿了。寫Java語句,計數groceryBag中"soup"的出現次數並全部刪除。不要從包中刪除任何其他的字符串。報告包中出現的"soup"的個數。groceryBag中可能不包含"soup"。
3.給定如練習2中所描述的groceryBag,對groceryBag進行操作groceryBag.toArray(),會有什麼影響?
4.給定如練習2中所描述的groceryBag,寫Java語句,創建這個包中的不同字符串的數組。即,如果"soup"在groceryBag中出現3次,則它在數組中應該僅出現一次。數組創建完成後,groceryBag的內容應該不變。
5.兩個集合的並集是將它們的內容合並到一個新集合中。在ADT包的BagInterface接口中添加一個方法union,它返回由接收調用方法的包和方法參數的包的並得到的一個新包。包含對方法進行充分說明的足夠的注釋。
注意,兩個包的並集可能含有重複項。例如,如果對象x在一個包中出現5次,在另一個包中出現2次,則在這兩個包的並集中x出現7次。具體來說,假定bag1和bag2都是Bag對象,這裏,Bag實現了BagInterface;bag1含有String對象a、b和c;而bag2含有String對象b、b、d和e。執行下列語句後
包everything中含有字符串a、b、b、b、c、d和e。注意,union不影響bag1和bag2的內容。
6.兩個集合的交集是同時出現在兩個集合中的項組成的新集合。即,它含有重複部分的項。在ADT包的BagInterface接口中添加一個方法intersection,它返回由接收調用方法的包和方法參數的包的交得到的一個新包。包含對方法進行充分說明的足夠的注釋。
注意,兩個包的交集可能含有重複項。例如,如果對象x在一個包中出現5次,在另一個包中出現2次,則在這兩個包的交集中x出現2次。具體來說,假定bag1和bag2都是Bag對象,這裏,Bag實現了BagInterface。bag1含有String對象a、b和c;而bag2含有String對象b、b、d和e。執行下列語句後
包commonItems僅含有字符串b。如果b在bag1中出現2次,則commonItems將含有2個b,因為bag2也含有2個b。注意,intersection不影響bag1和bag2的內容。
7.兩個集合的差集是在一個集合中刪除第二個集合中也出現的項後剩餘的項組成的新集合。在ADT包的BagInterface接口中添加一個方法difference,它返回由接收調用方法的包和方法參數的包的差得到的一個新包。包含對方法進行充分說明的足夠的注釋。
注意,兩個包的差集可能含有重複項。例如,如果對象x在一個包中出現5次,在另一個包中出現2次,則在這兩個包的差集中x出現3次。具體來說,假定bag1和bag2都是Bag對象,這裏,Bag實現了BagInterface。bag1含有String對象a、b和c;而bag2中含有String對象b、b、d和e。執行下列語句後
包leftOver2中含有字符串b、d和e。注意,difference不影響bag1和bag2的內容。
8.寫代碼完成下列任務:考慮兩個能含有字符串的包。一個包名是letters,含有多個單字符的字符串。另一個包是空包,名為vowels。每次從letters中刪除一個字符串。如果字符串含有一個元音,則將它放入包vowels中;否則,丟棄這個串。在檢查了letters中的所有字符串後,報告包vowels中的元音數,及包中每個元音的出現次數。
9.寫代碼完成下列任務:考慮3個能含有字符串的包。一個包名是letters,含有多個單字符的字符串。另一個包名為vowels,含有5個字符串,每一個是一個元音。第三個包是空包,名為consonants。每次從letters中刪除一個字符串。檢查該字符串是否在包vowels中。如果在,丟棄這個串;否則,將它放入包consonants中。在檢查了letters中的所有字符串後,報告包consonants中的輔音數及包中每個輔音的出現次數。
項目
1.如1.5節所述,集合是一個不允許有重複值的特殊包。假定類Set實現了SetInterface。給定空集合,其對象是Set,且給定含有多個字符串的類Bag的一個對象,寫客戶語句,從給定的包創建一個集合。
2.假定桌上有一堆書。每本書太重太大,你隻能拿走這堆書中最上麵的一本。不能從其他書下拿走一本。類似地,可以在這堆書的最上麵放另一本從而在這堆書中增加一本。不能在其他書下麵增加一本。
如果僅用書名表示書,設計一個可以用來記錄桌上書堆中的書的類。規範說明每個方法:說明方法的目的;描述它的參數;寫方法頭的偽代碼。然後寫一個用於書堆方法的Java接口。在代碼中包括javadoc風格的注釋。
3.環(ring)是項的集合(collection),它有一個指向當前項的引用。操作(稱為advance)將引用指向集合(collection)中的下一項。當引用到達最後一項時,下一次advance操作將引用指回第一項。環還有得到當前項、添加一項及刪除一項的操作。項添加的位置及刪除的位置由你來定。
設計一個ADT來表示對象的環。說明每個方法:說明方法的目的;描述它的參數;寫方法頭的偽代碼。然後寫一個用於環方法的Java接口。在代碼中包括javadoc風格的注釋。
4.一盒(shoe)撲克牌中含有一些標準的卡牌。盒中的這些牌可以洗牌,然後一次打出一張。也可以計算盒中牌的張數。
當一把牌打完後,應該將所有的牌放回盒中並洗牌。有些紙牌遊戲要求,當牌盒變空時,棄牌堆中的牌要放回盒中。然後重洗盒中的牌。在本例中,不是所有的牌都在盒中;有些牌被玩家拿著。
設計一個盒的ADT,假定你有類PlayingCard,你也應該說明它。不需要一個ADT紙牌,因為紙牌是牌張數為1的一個盒。
說明每個ADT操作;說明方法的目的;描述它的參數;寫方法頭的偽代碼。然後寫一個用於盒的方法的Java接口。在代碼中包括javadoc風格的注釋。
5.安裝空調的一次投標包括公司名、設備描述、設計性能、設備價格及安裝費用。
設計表示任意投標的一個ADT。然後設計另外一個ADT,表示投標集合。第二個ADT應該包含根據價格和性能查找投標的方法。還要注意,一個公司能投多個標,每個有不同的設備。
說明每個ADT操作;說明方法的目的;描述它的參數;寫方法頭的偽代碼。然後寫一個用於投標方法的Java接口。在代碼中包括javadoc風格的注釋。
6.一個矩陣是數值的一個矩形數組。可以將兩個矩陣相加或相乘得到第三個矩陣。可以用一個矩陣乘上一個標量,可以轉置矩陣。設計一個表示有這些操作的矩陣的ADT。
說明每個ADT操作;說明方法的目的;描述它的參數;寫方法頭的偽代碼。然後寫一個用於矩陣方法的Java接口。在代碼中包括javadoc風格的注釋。
自測題答案
2.不合法。兩個方法有相同的簽名。我們記得,方法的返回值類型不是簽名的一部分。這些方法有相同的名字和參數列表。
3.合法。兩個方法有不同的簽名。它們是重載方法。
最後更新:2017-06-26 16:02:23