版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課 程 設(shè) 計(jì)</b></p><p> 課程名稱 Java語(yǔ)言課程設(shè)計(jì) </p><p> 題目名稱 集合的并、交和差運(yùn)算 </p><p> 學(xué)生學(xué)院 應(yīng)用數(shù)學(xué)學(xué)院 </p><p> 專業(yè)班級(jí)___ ____</p><p>
2、學(xué) 號(hào)____________</p><p> 學(xué)生姓名_______________</p><p> 指導(dǎo)教師 </p><p> 2013年 10月 28 日</p><p><b> 目錄</b></p><p><b> 一、程序介
3、紹</b></p><p><b> 1、程序界面</b></p><p><b> 2、主要功能</b></p><p> 二、實(shí)驗(yàn)方案及主要代碼</p><p><b> 1、結(jié)點(diǎn)類(lèi)</b></p><p><b>
4、2、鏈表類(lèi) </b></p><p><b> 構(gòu)造方法</b></p><p><b> 鏈表元素異常檢測(cè)</b></p><p><b> 增加元素</b></p><p><b> 顯示鏈表</b></p><
5、p><b> 鏈表排序</b></p><p> String鏈表排序</p><p><b> 集合交運(yùn)算</b></p><p><b> 集合并運(yùn)算</b></p><p><b> 集合差運(yùn)算</b></p><
6、p><b> 3、窗口類(lèi)</b></p><p> 集合元素類(lèi)型(單選框按鈕組)</p><p> 集合交、并、差運(yùn)算按鈕</p><p><b> Reset按鈕</b></p><p><b> Search按鈕</b></p><p&g
7、t;<b> 排序按鈕</b></p><p><b> 三、實(shí)驗(yàn)總結(jié)</b></p><p><b> 我負(fù)責(zé)的工作</b></p><p><b> 問(wèn)題及討論</b></p><p> 結(jié)點(diǎn)元素的數(shù)據(jù)類(lèi)型 object與泛型<T>
8、;</p><p> 集合元素的分類(lèi)及其優(yōu)點(diǎn)</p><p> 集合并交差算法的時(shí)間復(fù)雜度</p><p><b> 實(shí)驗(yàn)總結(jié)</b></p><p><b> 程序介紹</b></p><p><b> 1、程序界面:</b></p&g
9、t;<p><b> 2、主要功能有:</b></p><p> 1)集合的元素類(lèi)型有三個(gè)選擇,分別是Integer、Double、String。</p><p> 2)通過(guò)編輯框輸入鏈表,鼠標(biāo)移到編輯框會(huì)提示“輸入集合元素,以空白符隔 開(kāi)”,從而實(shí)現(xiàn)整條鏈表一起輸入。</p><p> 3)如果編輯框輸入元素與已選擇
10、的操作不同或元素輸入重復(fù),便會(huì)分別彈出對(duì)話框提示“集合中元素類(lèi)型不合法”、“元素不可重復(fù)”。</p><p> 4)按鈕Union、Intersec、Difference分別實(shí)現(xiàn)集合的交、并、差運(yùn)算。</p><p> 5)按鈕Reset重置文本編輯框。</p><p> 6)點(diǎn)擊按鈕Search會(huì)彈出搜索替換對(duì)話框,選擇需替換的鏈表(collection1或
11、 collection2),輸入搜索元素和替換元素,點(diǎn)擊Ensure替換。</p><p> 7)對(duì)話框底層的按鈕可實(shí)現(xiàn)對(duì)result編輯框進(jìn)行升序(降序)排序。</p><p><b> 3、數(shù)據(jù)處理</b></p><p><b> 集合并運(yùn)算</b></p><p><b&g
12、t; 交運(yùn)算:</b></p><p><b> 差運(yùn)算:</b></p><p><b> 降序排序:</b></p><p><b> 查找替換:</b></p><p><b> 實(shí)驗(yàn)方案及主要代碼</b></p>
13、<p> 程序有三個(gè)類(lèi),分別是節(jié)點(diǎn)類(lèi)(泛型)、鏈表類(lèi)、和窗體類(lèi)。</p><p><b> 節(jié)點(diǎn)類(lèi)</b></p><p> class Node<T> { //結(jié)點(diǎn)類(lèi)</p><p><b> T data;</b></p><p> Node next;&
14、lt;/p><p><b> }</b></p><p> 節(jié)點(diǎn)類(lèi)運(yùn)用了泛型,里面有兩個(gè)成員變量,分別是結(jié)點(diǎn)存放的數(shù)據(jù)data,結(jié)點(diǎn)所指向的下一個(gè)結(jié)點(diǎn) next。</p><p><b> 鏈表類(lèi)</b></p><p> 鏈表類(lèi)類(lèi)名:ListLink</p><p>&
15、lt;b> 有兩個(gè)成員變量:</b></p><p> Node head; //指向鏈表的頭引用</p><p> int length; //鏈表的長(zhǎng)度</p><p><b> 主要的方法有:</b></p><p><b> 構(gòu)造方法</b></p
16、><p> 以整形為例,三個(gè)類(lèi)型的元素都有自己的構(gòu)造方法</p><p> 無(wú)形參的構(gòu)造方法,頭結(jié)點(diǎn)為空,長(zhǎng)度為0.</p><p> public ListLink(int t) {//int t僅為實(shí)現(xiàn)方法的重構(gòu),無(wú)實(shí)際作用</p><p> head = new Node<Integer>();</p>
17、<p> head.next = null;</p><p> length = 0;</p><p><b> }</b></p><p> 用編輯框的字符串初始化鏈表</p><p> public ListLink(String strT, int t) throws Exception {&l
18、t;/p><p> //參數(shù) int t僅為實(shí)現(xiàn)方法的重構(gòu),無(wú)實(shí)際作用</p><p> //從文本框中獲取字符串strT,并用其來(lái)生成一個(gè)集合</p><p> Node<Integer> p;</p><p> head = new Node<Integer>();</p><p>
19、String[] str = strT.split("\\s");</p><p> if (!checkRepeat(str)) {</p><p> throw new Exception("整數(shù)集合不可有重復(fù)的元素!");</p><p><b> }</b></p><p
20、> if (!checkIntAbnormal(str)) {</p><p> throw new Exception("整數(shù)集合中元素類(lèi)型不合法");</p><p><b> }</b></p><p> length = str.length;</p><p> head.ne
21、xt = null;</p><p> for (int i = length - 1; i >= 0; i--) {</p><p> p = new Node();</p><p> p.data = Integer.parseInt(str[i]);</p><p> p.next = head.next;</p&g
22、t;<p> head.next = p;</p><p><b> }</b></p><p><b> }</b></p><p> Double型和String型的構(gòu)造方法同理.</p><p> Double型:Node< Integer >改成Node&
23、lt; Double></p><p> Integer.parseInt(str[i])改成Double.parseDouble (str[i]);</p><p> String型:Node< Integer >改成Node< String></p><p> p.data = Integer.parseInt(str[i])
24、;改成p.data= str[i];</p><p><b> 鏈表元素異常檢測(cè)</b></p><p> 由集合的知識(shí)可知,集合的元素不可重復(fù),故在初始化鏈表時(shí),需檢測(cè)集合里的元素是否重復(fù)。檢測(cè)重復(fù)代碼如下:</p><p> public boolean checkRepeat(String str[]) </p>&l
25、t;p><b> {</b></p><p> for (int i = 0; i < str.length; i++) {</p><p> for (int j = (i + 1); j < str.length; j++) {</p><p> if (str[i].equals(str[j])) {</p
26、><p> return false;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> return true;</p><p><b
27、> }</b></p><p> 程序里設(shè)置了三種數(shù)據(jù)類(lèi)型,故初始化還需檢測(cè)輸入元素是否為異常類(lèi)型,如果異常,則拋出異常,代碼如下:</p><p> public boolean checkIntAbnormal(String str[]) {</p><p> for (int i = 0; i < str.length; i++
28、) {</p><p><b> try {</b></p><p> int Int = Integer.parseInt(str[i]);</p><p> //double Db=Double.parseDouble(str[i]);</p><p> } catch (NumberFormatExcept
29、ion e) {</p><p> return false;</p><p><b> }</b></p><p><b> }</b></p><p> return true;</p><p><b> }</b></p>
30、<p><b> 增加元素</b></p><p> 鏈表中,每次插入元素都是在頭結(jié)點(diǎn)后插入。(以int型為例)</p><p> //public void Add(String var)</p><p> public void Add(int var) {</p><p> Node<In
31、teger> p = new Node();</p><p> //Node<String> p=new Node();</p><p> p.data = var;</p><p> p.next = head.next;</p><p> head.next = p;</p><p>&l
32、t;b> length++;</b></p><p><b> }</b></p><p><b> 顯示鏈表</b></p><p> 從頭結(jié)點(diǎn)的next開(kāi)始,遍歷所有結(jié)點(diǎn),逐個(gè)輸出</p><p> public String showIntList() {</
33、p><p> Node<Integer> n = head.next;</p><p> StringBuffer str = new StringBuffer();</p><p> while (n != null) {</p><p> str.append(n.data + " ");</p&
34、gt;<p> n = n.next;</p><p><b> }</b></p><p> return new String(str);</p><p><b> }</b></p><p><b> 鏈表排序</b></p><
35、;p> 鏈表升序,從頭結(jié)點(diǎn)后第一個(gè)結(jié)點(diǎn)開(kāi)始,每一個(gè)結(jié)點(diǎn)和后面所有的結(jié)點(diǎn)比較,如果結(jié)點(diǎn)的數(shù)據(jù)大于(降序則是小于)后一個(gè)結(jié)點(diǎn)的數(shù)據(jù),交換彼此的數(shù)據(jù),遍歷所有結(jié)點(diǎn),便完成排序。</p><p> 整型鏈表升序排序:(Double型同理)</p><p> public void sortInt_ASC() {</p><p> Node<Integer
36、> cur = head.next;</p><p> Node<Integer> nn = new Node();</p><p> while (cur != null) {</p><p> Node<Integer> after = cur.next;</p><p> while (after
37、!= null) {</p><p> //降序則為if (cur.data.compareTo(after.data) < 0)</p><p> if (cur.data.compareTo(after.data) > 0) {</p><p> nn.data = after.data;</p><p> after
38、.data = cur.data;</p><p> cur.data = nn.data;</p><p><b> }</b></p><p> after = after.next;</p><p><b> }</b></p><p> cur = cur.
39、next;</p><p><b> }</b></p><p><b> }</b></p><p> String鏈表排序</p><p> 字符串元素的比較算法:</p><p> 把String元素里的每一個(gè)char字符轉(zhuǎn)換成ASCII編碼值,然后累加得到
40、 累加值。累加值高的元素大于累加值低的元素。</p><p> 例如 b>a;cd>ab;</p><p><b> 算法代碼如下:</b></p><p> public static boolean StringCompare(String str1,String str2)</p><p>&l
41、t;b> {</b></p><p> char ch1[]=str1.toLowerCase().toCharArray();</p><p> char ch2[]=str2.toLowerCase().toCharArray();</p><p><b> int l1=0;</b></p><
42、;p><b> int l2=0;</b></p><p> for(int i=0;i<ch1.length;i++)</p><p><b> {</b></p><p> l1+=(int)ch1[i];</p><p><b> }</b><
43、/p><p> for(int j=0;j<ch2.length;j++)</p><p><b> {</b></p><p> l2+=(int)ch2[j];</p><p><b> }</b></p><p><b> if(l1>l2)
44、</b></p><p> return true;</p><p><b> else</b></p><p> return false; </p><p><b> }</b></p><p><b> 升序排序代碼:</b>
45、;</p><p> public void sortString_ASC()</p><p><b> {</b></p><p> Node<String> cur=head.next;</p><p> Node<String> nn=new Node();</p>&
46、lt;p> while(cur!=null)</p><p><b> {</b></p><p> Node<String> after=cur.next;</p><p> while(after!=null)</p><p><b> {</b></p>
47、<p> //降序排序 if(!StringCompare(cur.data,after.data))</p><p> if(StringCompare(cur.data,after.data))</p><p><b> {</b></p><p> nn.data=after.data;</p><
48、;p> after.data=cur.data;</p><p> cur.data=nn.data;</p><p><b> }</b></p><p> after=after.next;</p><p><b> }</b></p><p> cur
49、=cur.next;</p><p><b> }</b></p><p><b> }</b></p><p><b> 集合交運(yùn)算</b></p><p> Integer型交運(yùn)算:(Double型同理)</p><p> 對(duì)鏈1和鏈2進(jìn)行
50、升序排序,排序后,定義兩個(gè)結(jié)點(diǎn)cur1和cur2指向鏈1和鏈2都從頭結(jié)點(diǎn)后第一個(gè)元素。</p><p> 如果鏈1的元素小于鏈2的元素,則cur1指向鏈1的后一個(gè)結(jié)點(diǎn)。</p><p> 如果鏈1的元素大于鏈2的元素,則cur2指向鏈2的后一個(gè)結(jié)點(diǎn)。</p><p> 如果鏈1的元素等于鏈2的元素,則把這個(gè)結(jié)點(diǎn)加入鏈3.然后cur1和cur2都指向鏈的下一個(gè)結(jié)
51、點(diǎn)。</p><p> 以此方式遍歷鏈1與鏈2,直到其中一條鏈到達(dá)末尾。</p><p><b> 實(shí)現(xiàn)代碼如下:</b></p><p> public static void InterSectionInt(ListLink L1, ListLink L2, ListLink L3) {</p><p>
52、 L1.sortInt_ASC();</p><p> L2.sortInt_ASC();</p><p> Node<Integer> cur1 = L1.head.next;</p><p> Node<Integer> cur2 = L2.head.next;</p><p> while (cur1 !
53、= null && cur2 != null) {</p><p> if (cur1.data.compareTo(cur2.data) == 0) {</p><p> L3.Add(cur1.data);</p><p> cur1 = cur1.next;</p><p> cur2 = cur2.next;&
54、lt;/p><p> } else if (cur1.data.compareTo(cur2.data) < 0) {</p><p> cur1 = cur1.next;</p><p><b> } else {</b></p><p> cur2 = cur2.next;</p><p
55、><b> }</b></p><p><b> }</b></p><p> L3.sortInt_ASC();</p><p><b> }</b></p><p> String型交運(yùn)算:</p><p> 定義兩個(gè)結(jié)點(diǎn)cur1和
56、cur2指向鏈1和鏈2都從頭結(jié)點(diǎn)后第一個(gè)元素。</p><p> 遍歷鏈2中的結(jié)點(diǎn),如果cur1的數(shù)據(jù)等于鏈2其中的一個(gè)結(jié)點(diǎn)的數(shù)據(jù),則把cur1的數(shù)據(jù)加入鏈3.然后cur1指向鏈1的下一個(gè)結(jié)點(diǎn)。</p><p> 以此方式遍歷鏈1,直到鏈到1達(dá)末尾。</p><p> public static void InterSectionString(ListL
57、ink L1,ListLink L2,ListLink L3)</p><p><b> {</b></p><p> Node<String> cur1=L1.head.next;</p><p> Node<String> cur2=L2.head.next;</p><p> whi
58、le(cur1!=null)</p><p><b> {</b></p><p> while(cur2!=null)</p><p><b> {</b></p><p> if(cur1.data.equals(cur2.data))</p><p> L3.
59、Add(cur1.data);</p><p> cur2=cur2.next;</p><p><b> }</b></p><p> cur1=cur1.next;</p><p> cur2=L2.head.next;</p><p><b> }</b>&l
60、t;/p><p><b> }</b></p><p><b> 集合并運(yùn)算</b></p><p> Integer型并運(yùn)算:(Double型String型同理)</p><p> 對(duì)鏈1和鏈2進(jìn)行升序排序,排序后,定義兩個(gè)結(jié)點(diǎn)cur1和cur2指向鏈1和鏈2都從頭結(jié)點(diǎn)后第一個(gè)元素。</
61、p><p> 如果鏈1的元素小于鏈2的元素,則把cur1的數(shù)據(jù)加入鏈3,然后指向鏈1的后一個(gè)結(jié)點(diǎn)。</p><p> 如果鏈1的元素大于鏈2的元素,則把cur2的數(shù)據(jù)加入鏈3,然后指向鏈2的后一個(gè)結(jié)點(diǎn)。</p><p> 如果鏈1的元素等于鏈2的元素,則把這個(gè)結(jié)點(diǎn)加入鏈3.然后cur1和cur2都指向鏈的下一個(gè)結(jié)點(diǎn)。</p><p> 以
62、此方式遍歷鏈1與鏈2,直到其中一條鏈到達(dá)末尾。</p><p> 判斷哪一條鏈還沒(méi)到達(dá)末尾,把這條鏈的剩余結(jié)點(diǎn)數(shù)據(jù)都添加到鏈3.</p><p><b> 實(shí)現(xiàn)代碼如下:</b></p><p> public static void UnionInt(ListLink L1, ListLink L2, ListLink L3) {<
63、;/p><p> L1.sortInt_ASC();</p><p> L2.sortInt_ASC();</p><p> Node<Integer> cur1 = L1.head.next;</p><p> Node<Integer> cur2 = L2.head.next;</p><p
64、> while (cur1 != null && cur2 != null) {</p><p> if (cur1.data.compareTo(cur2.data) == 0) {</p><p> L3.Add(cur1.data);</p><p> cur1 = cur1.next;</p><p>
65、 cur2 = cur2.next;</p><p> } else if (cur1.data.compareTo(cur2.data) < 0) {</p><p> L3.Add(cur1.data);</p><p> cur1 = cur1.next;</p><p><b> } else {</b&
66、gt;</p><p> L3.Add(cur2.data);</p><p> cur2 = cur2.next;</p><p><b> }</b></p><p><b> }</b></p><p> while (cur1 != null) {</
67、p><p> L3.Add(cur1.data);</p><p> cur1 = cur1.next;</p><p><b> }</b></p><p> while (cur2 != null) {</p><p> L3.Add(cur2.data);</p><
68、;p> cur2 = cur2.next;</p><p><b> }</b></p><p> L3.sortInt_ASC();</p><p> String型并運(yùn)算:</p><p> 定義兩個(gè)結(jié)點(diǎn)cur1和cur2指向鏈1和鏈2都從頭結(jié)點(diǎn)后第一個(gè)元素。</p><p>
69、; 遍歷鏈2中的所有結(jié)點(diǎn),如果cur1的數(shù)據(jù)不等于鏈2所有結(jié)點(diǎn)的數(shù)據(jù),則把cur1的數(shù)據(jù)加入鏈3.然后cur1指向鏈1的下一個(gè)結(jié)點(diǎn)。</p><p> 以此方式遍歷鏈1,直到鏈到1達(dá)末尾。</p><p> 把鏈2所有結(jié)點(diǎn)的數(shù)據(jù)加入鏈3.</p><p> public static void UnionString(ListLink L1,ListLin
70、k L2,ListLink L3)</p><p><b> {</b></p><p> Node<String> cur1=L1.head.next;</p><p> Node<String> cur2=L2.head.next;</p><p> while(cur1!=null)
71、</p><p><b> {</b></p><p> while(cur2!=null)</p><p><b> {</b></p><p> if(cur1.data.equals(cur2.data))</p><p><b> break;&l
72、t;/b></p><p> cur2=cur2.next;</p><p> if(cur2==null)</p><p> L3.Add(cur1.data);</p><p><b> }</b></p><p> cur1=cur1.next;</p><
73、;p> cur2=L2.head.next;</p><p><b> }</b></p><p> while(cur2!=null)</p><p><b> {</b></p><p> L3.Add(cur2.data);</p><p> cur2
74、=cur2.next;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 集合差運(yùn)算</b></p><p> 以Integer型為
75、例子:(Double和String同理)</p><p> 對(duì)鏈1和鏈2進(jìn)行升序排序,排序后,定義兩個(gè)結(jié)點(diǎn)cur1和cur2指向鏈1和鏈2都從頭結(jié)點(diǎn)后第一個(gè)元素。</p><p> 遍歷鏈2所有的結(jié)點(diǎn),如果cur1的數(shù)據(jù)不等于鏈2所有結(jié)點(diǎn)的數(shù)據(jù),則把cur1的數(shù)據(jù)加入鏈3.然后cur1指向鏈1的下一個(gè)結(jié)點(diǎn)。</p><p> 以此方式遍歷鏈1,直到鏈到1達(dá)
76、末尾。</p><p> public static void DifferenceInt(ListLink L1, ListLink L2, ListLink L3) {</p><p> L1.sortInt_ASC();</p><p> L2.sortInt_ASC();</p><p> Node<Integer>
77、; cur1 = L1.head.next;</p><p> Node<Integer> cur2 = L2.head.next;</p><p> while (cur1 != null && cur2 != null) {</p><p> while (cur2 != null) {</p><p>
78、 if (cur1.data.compareTo(cur2.data) == 0) {</p><p><b> break;</b></p><p><b> }</b></p><p> cur2 = cur2.next;</p><p> if (cur2 == null) {<
79、;/p><p> L3.Add(cur1.data);</p><p><b> }</b></p><p><b> }</b></p><p> cur1 = cur1.next;</p><p> cur2 = L2.head.next;</p>&
80、lt;p><b> }</b></p><p> L3.sortInt_ASC();</p><p><b> }</b></p><p><b> 窗體類(lèi)</b></p><p> 集合元素類(lèi)型(單選框按鈕組)</p><p> 創(chuàng)建
81、按鈕組,把集合元素類(lèi)型這三個(gè)單項(xiàng)按鈕加入按鈕組,實(shí)現(xiàn)單選功能。</p><p> 集合交、并、差運(yùn)算按鈕</p><p> 以集合并運(yùn)算按鈕為例:(交、差運(yùn)算功能按鈕同理)</p><p> 獲取編輯框1的字符串1,編輯框2的字符串2.</p><p> 判斷選擇了哪個(gè)單選按鈕,進(jìn)行對(duì)應(yīng)的元素處理</p><p&g
82、t; 創(chuàng)建三個(gè)新的鏈表對(duì)象,用字符串1和字符串2對(duì)鏈1和鏈2初始化。</p><p><b> 集合并運(yùn)算。</b></p><p> 如果出現(xiàn)字符串重復(fù)或異常錯(cuò)誤則彈出警告窗</p><p> 更新編輯框的標(biāo)簽,顯示長(zhǎng)度。</p><p><b> 代碼如下:</b></p>
83、<p> String str1 = collection1.getText();</p><p> String str2 = collection2.getText();</p><p> ListLink List1 = null, List2 = null, List3 = null;</p><p> if (integerstyle
84、.isSelected()) { //集合為整形</p><p><b> try {</b></p><p> List1 = new ListLink(str1, 1);</p><p> List2 = new ListLink(str2, 1);</p><p> List3 = new
85、 ListLink(1);</p><p> ListLink.UnionInt(List1, List2, List3);</p><p> result.setText(List3.showIntList());</p><p> } catch (Exception e) {</p><p> javax.swing.JOpti
86、onPane.showMessageDialog(this, e.getMessage(), "錯(cuò)誤提示", javax.swing.JOptionPane.ERROR_MESSAGE);</p><p><b> }</b></p><p> } else if (doublestyle.isSelected()) { //集合為浮
87、點(diǎn)型</p><p><b> try {</b></p><p> List1 = new ListLink(str1, 1.0);</p><p> List2 = new ListLink(str2, 1.0);</p><p> List3 = new ListLink(1.0);</p>
88、<p> ListLink.UnionDouble(List1, List2, List3);</p><p> result.setText(List3.showDoubleList());</p><p> } catch (Exception e) {</p><p> javax.swing.JOptionPane.showMessageD
89、ialog(this, e.getMessage(), "錯(cuò)誤提示", javax.swing.JOptionPane.ERROR_MESSAGE);</p><p><b> }</b></p><p> } else if (letterstyle.isSelected()) { //集合為字符串型</p>
90、<p><b> try {</b></p><p> List1=new ListLink(str1,"1");</p><p> List2 = new ListLink(str2,"1");</p><p> List3 = new ListLink("1")
91、;</p><p> ListLink.UnionString(List1, List2, List3);</p><p> result.setText(List3.showStringlist());</p><p><b> }</b></p><p> catch(Exception e) {</p
92、><p> javax.swing.JOptionPane.showMessageDialog(this, e.getMessage(), "錯(cuò)誤提示", javax.swing.JOptionPane.ERROR_MESSAGE);</p><p><b> }</b></p><p><b> }</b
93、></p><p> collection1.setToolTipText("length:" + List1.length);</p><p> collection2.setToolTipText("length:" + List2.length);</p><p> result.setToolTipText
94、("length:" + List3.length);</p><p><b> Reset按鈕</b></p><p> collection1.setText("");</p><p> collection2.setText("");</p><p>
95、; result.setText("");</p><p> collection1.setToolTipText("輸入集合元素,以空白符隔開(kāi)");</p><p> collection2.setToolTipText("輸入集合元素,以空白符隔開(kāi)");</p><p> result.setT
96、oolTipText("結(jié)果");</p><p><b> Search按鈕</b></p><p> 彈出查詢對(duì)話框:(jDialog1為查詢對(duì)話框的名字)</p><p> jDialog1.setSize(400, 300);</p><p> jDialog1.setVisible(
97、true);</p><p> Collection1和collection2對(duì)應(yīng)</p><p> 查詢對(duì)話框的Ensure按鈕代碼:</p><p> 判斷選擇了哪個(gè)編輯框,對(duì)選擇了的編輯框做如下操作:</p><p> 以空白符為分隔符,分離編輯框的字符串,存入String數(shù)組里。</p><p> 獲
98、取search和change編輯框的字符</p><p> 遍歷string數(shù)組,如果str[i] 和search 相同,則把str[i]改成change</p><p> 更新Collection1或collection2編輯框</p><p><b> 輸出查找和替換信息</b></p><p> priva
99、te void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { </p><p><b> // 查找和替換:</b></p><p> if (Check_Collection1.isSelected()) {<
100、;/p><p> String str1 = collection1.getText();</p><p> String str[] = str1.split(" ");</p><p> String search_str = searchtext.getText();</p><p> String change
101、_str = changetext.getText();</p><p> String new_Textfield = "";</p><p> int count = 0; //記錄有幾個(gè)相同的字符串</p><p> for (int i = 0; i < str.length; i++) {<
102、;/p><p> if (str[i].equals(search_str)) {</p><p> str[i] = change_str;</p><p><b> count++;</b></p><p><b> }</b></p><p> new_Textf
103、ield += (str[i] + " ");</p><p><b> }</b></p><p> collection1.setText(new_Textfield);</p><p> javax.swing.JOptionPane.showMessageDialog(this,</p><
104、p> "找到 " + "\"" + search_str + "\" " + count + "個(gè),以全部 替換成 \"" + change_str + "\"",</p><p> "查找替換信息Check_Collection1&quo
105、t;, javax.swing.JOptionPane.PLAIN_MESSAGE);</p><p><b> }</b></p><p> if (Check_Collection2.isSelected()) {</p><p> String str1 = collection2.getText();&
106、lt;/p><p> String str[] = str1.split(" ");</p><p> String search_str = searchtext.getText();</p><p> String change_str = changetext.getText();</p><p> String
107、 new_Textfield = "";</p><p> int count = 0; //記錄有幾個(gè)相同的字符串</p><p> for (int i = 0; i < str.length; i++) {</p><p> if (str[i].equals(search_str)) {</
108、p><p> str[i] = change_str;</p><p><b> count++;</b></p><p><b> }</b></p><p> new_Textfield += (str[i] + " ");</p><p><
109、;b> }</b></p><p> collection2.setText(new_Textfield);</p><p> javax.swing.JOptionPane.showMessageDialog(this,</p><p> "找到 " + "\"" + search_str
110、 + "\" " + count + "個(gè),以全部替換成 \"" + change_str + "\"",</p><p> "查找替換信息Check_Collection2", javax.swing.JOptionPane.PLAIN_MESSAGE);</
111、p><p><b> 排序按鈕</b></p><p> 對(duì)result編輯框進(jìn)行升序排序:(降序同理)</p><p> private void ascendActionPerformed(java.awt.event.ActionEvent evt) { <
112、;/p><p><b> // 升序排序:</b></p><p> String strT = result.getText();</p><p> ListLink List;</p><p> if (integerstyle.isSelected()) {</p><p><b&
113、gt; try {</b></p><p> List = new ListLink(strT, 1);</p><p> List.sortInt_ASC();</p><p> result.setText(List.showIntList());</p><p> } catch (Exception e) {&l
114、t;/p><p> javax.swing.JOptionPane.showMessageDialog(this, e.getMessage(), "錯(cuò)誤提示", javax.swing.JOptionPane.ERROR_MESSAGE);</p><p><b> }</b></p><p><b> }&l
115、t;/b></p><p> if (doublestyle.isSelected()) {</p><p><b> try {</b></p><p> List = new ListLink(strT, 1.0);</p><p> List.sortDouble_ASC();</p>
116、<p> result.setText(List.showDoubleList());</p><p> } catch (Exception e) {</p><p> javax.swing.JOptionPane.showMessageDialog(this, e.getMessage(), "錯(cuò)誤提示", javax.swing.JOptionP
117、ane.ERROR_MESSAGE);</p><p><b> }</b></p><p><b> }</b></p><p> if(letterstyle.isSelected()) {</p><p><b> try {</b></p><
118、;p> List=new ListLink(strT,"1");</p><p> List.sortString_ASC();</p><p> result.setText(List.showStringlist());</p><p><b> }</b></p><p> ca
119、tch(Exception e) {</p><p> javax.swing.JOptionPane.showMessageDialog(this, e.getMessage(), "錯(cuò)誤提示", javax.swing.JOptionPane.ERROR_MESSAGE);</p><p><b> }</b></p><
120、;p><b> }</b></p><p><b> }</b></p><p><b> 實(shí)驗(yàn)總結(jié)</b></p><p><b> 我負(fù)責(zé)的工作</b></p><p><b> 結(jié)點(diǎn)類(lèi)代碼</b></p&g
121、t;<p> 大部分鏈表類(lèi)算法和代碼</p><p><b> 小部分窗口代碼</b></p><p><b> 問(wèn)題及討論</b></p><p> 結(jié)點(diǎn)元素的數(shù)據(jù)類(lèi)型 object與泛型<T></p><p> 最開(kāi)始的時(shí)候試過(guò)用object類(lèi)型定義集合元素,
122、但發(fā)現(xiàn)數(shù)據(jù)用object定義固然方便,但Object類(lèi)的數(shù)據(jù)只能比較是否相等,而無(wú)法比較大小。</p><p> 實(shí)現(xiàn)對(duì)Integer集合的元素和Double集合的元素進(jìn)行排序,可以使用泛型定義。使用泛型可使代碼簡(jiǎn)明規(guī)范。</p><p> class Node<T> { //結(jié)點(diǎn)類(lèi)</p><p><b> T data;<
123、/b></p><p> Node next;</p><p><b> }</b></p><p> 集合元素的分類(lèi)及其優(yōu)點(diǎn)</p><p> String型可以包含所以數(shù)據(jù),如果只用String型,程序可變得很簡(jiǎn)單。</p><p> 但String 型處理Integer型和D
124、ouble型不方便,無(wú)法有效排序,輸入錯(cuò)誤混入其它數(shù)據(jù)類(lèi)型容易出現(xiàn)錯(cuò)誤。</p><p> 所以引入Integer和Double型可以實(shí)現(xiàn)排序與排錯(cuò),更好地處理數(shù)據(jù)。</p><p> 集合并交差算法的時(shí)間復(fù)雜度</p><p> 把集合元素分為Integer、Double、String三種類(lèi)型后。</p><p> Integer型
125、和Double型可以進(jìn)行排序。</p><p> 排序后可以優(yōu)化集合的交、并運(yùn)算。使運(yùn)算所花時(shí)間大大縮減。</p><p> 排序可見(jiàn)實(shí)驗(yàn)方案及代碼實(shí)現(xiàn)的2.5鏈表排序。</p><p> 對(duì)比2.7集合的交運(yùn)算,2.8集合的并運(yùn)算里面Integer和String實(shí)現(xiàn)交并運(yùn)算的算法??傻贸鲈诮贿\(yùn)算中,最不理想的條件下,String集合的時(shí)間復(fù)雜度為L(zhǎng)1.len
126、gth*L2.length。而Integer的時(shí)間復(fù)雜度為L(zhǎng)1.length+L2.length。</p><p> 由此可看出,Integer的算法運(yùn)行時(shí)間要比String的快很多。在處理大量的數(shù)據(jù)時(shí),Integer的算法的優(yōu)勢(shì)更為明顯。</p><p><b> 總結(jié)</b></p><p> 通過(guò)這次java課程設(shè)計(jì),讓我體會(huì)到了j
127、ava和c++的不同之處。Java與c++相比,java代碼更為簡(jiǎn)單便捷。Java雖然沒(méi)有指針,但通過(guò)在類(lèi)里定義類(lèi)成員(類(lèi) next),同樣能達(dá)到指針的效果,而且更容易操作。</p><p> 通過(guò)對(duì)鏈表的操作和集合并交差算法的實(shí)現(xiàn),讓我更熟悉java的語(yǔ)法,而不是停留在書(shū)本上。</p><p> 課程設(shè)計(jì)期間,通過(guò)翻閱《Netbeans 6.0程序開(kāi)發(fā)技術(shù)詳解》和《java
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 集合的并、交和差運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--集合的并、交和差運(yùn)算
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)---集合交、并、差、對(duì)稱差運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--集合的并、交和差運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--編制一個(gè)演示集合的并、交和差運(yùn)算的程序
- 4、集合的交、并、補(bǔ)運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)集合的交并差運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告(集合交集并集運(yùn)算)
- 集合的運(yùn)算+課程設(shè)計(jì)報(bào)告
- java語(yǔ)言課程設(shè)計(jì)報(bào)告
- 集合的運(yùn)算(交集、并集)
- c語(yǔ)言課程設(shè)計(jì)--數(shù)據(jù)集合處理
- java語(yǔ)言程序課程設(shè)計(jì)-- 坦克大戰(zhàn)
- 集合的運(yùn)算(交集、并集)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--文章編輯集合運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)----集合運(yùn)算課程設(shè)計(jì)報(bào)告(c++)
- java語(yǔ)言課程設(shè)計(jì)-小型超市管理系統(tǒng)
- java語(yǔ)言課程設(shè)計(jì)---記事本程序設(shè)計(jì)
- java課程設(shè)計(jì)
- java課程設(shè)計(jì)----課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論