java語(yǔ)言課程設(shè)計(jì)--集合的并、交和差運(yùn)算_第1頁(yè)
已閱讀1頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論