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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  課 程 設(shè) 計</b></p><p>  課程名稱 Java語言課程設(shè)計 </p><p>  題目名稱 集合的并、交和差運算 </p><p>  學(xué)生學(xué)院 應(yīng)用數(shù)學(xué)學(xué)院 </p><p>  專業(yè)班級___ ____</p><p>  

2、學(xué) 號____________</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>  二、實驗方案及主要代碼</p><p><b>  1、結(jié)點類</b></p><p><b>  

4、2、鏈表類 </b></p><p><b>  構(gòu)造方法</b></p><p><b>  鏈表元素異常檢測</b></p><p><b>  增加元素</b></p><p><b>  顯示鏈表</b></p><

5、p><b>  鏈表排序</b></p><p>  String鏈表排序</p><p><b>  集合交運算</b></p><p><b>  集合并運算</b></p><p><b>  集合差運算</b></p><

6、p><b>  3、窗口類</b></p><p>  集合元素類型(單選框按鈕組)</p><p>  集合交、并、差運算按鈕</p><p><b>  Reset按鈕</b></p><p><b>  Search按鈕</b></p><p&g

7、t;<b>  排序按鈕</b></p><p><b>  三、實驗總結(jié)</b></p><p><b>  我負責的工作</b></p><p><b>  問題及討論</b></p><p>  結(jié)點元素的數(shù)據(jù)類型 object與泛型<T>

8、;</p><p>  集合元素的分類及其優(yōu)點</p><p>  集合并交差算法的時間復(fù)雜度</p><p><b>  實驗總結(jié)</b></p><p><b>  程序介紹</b></p><p><b>  1、程序界面:</b></p&g

9、t;<p><b>  2、主要功能有:</b></p><p>  1)集合的元素類型有三個選擇,分別是Integer、Double、String。</p><p>  2)通過編輯框輸入鏈表,鼠標移到編輯框會提示“輸入集合元素,以空白符隔 開”,從而實現(xiàn)整條鏈表一起輸入。</p><p>  3)如果編輯框輸入元素與已選擇

10、的操作不同或元素輸入重復(fù),便會分別彈出對話框提示“集合中元素類型不合法”、“元素不可重復(fù)”。</p><p>  4)按鈕Union、Intersec、Difference分別實現(xiàn)集合的交、并、差運算。</p><p>  5)按鈕Reset重置文本編輯框。</p><p>  6)點擊按鈕Search會彈出搜索替換對話框,選擇需替換的鏈表(collection1或

11、 collection2),輸入搜索元素和替換元素,點擊Ensure替換。</p><p>  7)對話框底層的按鈕可實現(xiàn)對result編輯框進行升序(降序)排序。</p><p><b>  3、數(shù)據(jù)處理</b></p><p><b>  集合并運算</b></p><p><b&g

12、t;  交運算:</b></p><p><b>  差運算:</b></p><p><b>  降序排序:</b></p><p><b>  查找替換:</b></p><p><b>  實驗方案及主要代碼</b></p>

13、<p>  程序有三個類,分別是節(jié)點類(泛型)、鏈表類、和窗體類。</p><p><b>  節(jié)點類</b></p><p>  class Node<T> { //結(jié)點類</p><p><b>  T data;</b></p><p>  Node next;&

14、lt;/p><p><b>  }</b></p><p>  節(jié)點類運用了泛型,里面有兩個成員變量,分別是結(jié)點存放的數(shù)據(jù)data,結(jié)點所指向的下一個結(jié)點 next。</p><p><b>  鏈表類</b></p><p>  鏈表類類名:ListLink</p><p>&

15、lt;b>  有兩個成員變量:</b></p><p>  Node head; //指向鏈表的頭引用</p><p>  int length; //鏈表的長度</p><p><b>  主要的方法有:</b></p><p><b>  構(gòu)造方法</b></p

16、><p>  以整形為例,三個類型的元素都有自己的構(gòu)造方法</p><p>  無形參的構(gòu)造方法,頭結(jié)點為空,長度為0.</p><p>  public ListLink(int t) {//int t僅為實現(xiàn)方法的重構(gòu),無實際作用</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僅為實現(xiàn)方法的重構(gòu),無實際作用</p><p>  //從文本框中獲取字符串strT,并用其來生成一個集合</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ù)集合中元素類型不合法");</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>  鏈表元素異常檢測</b></p><p>  由集合的知識可知,集合的元素不可重復(fù),故在初始化鏈表時,需檢測集合里的元素是否重復(fù)。檢測重復(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ù)類型,故初始化還需檢測輸入元素是否為異常類型,如果異常,則拋出異常,代碼如下:</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é)點后插入。(以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é)點的next開始,遍歷所有結(jié)點,逐個輸出</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é)點后第一個結(jié)點開始,每一個結(jié)點和后面所有的結(jié)點比較,如果結(jié)點的數(shù)據(jù)大于(降序則是小于)后一個結(jié)點的數(shù)據(jù),交換彼此的數(shù)據(jù),遍歷所有結(jié)點,便完成排序。</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元素里的每一個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>  集合交運算</b></p><p>  Integer型交運算:(Double型同理)</p><p>  對鏈1和鏈2進行

50、升序排序,排序后,定義兩個結(jié)點cur1和cur2指向鏈1和鏈2都從頭結(jié)點后第一個元素。</p><p>  如果鏈1的元素小于鏈2的元素,則cur1指向鏈1的后一個結(jié)點。</p><p>  如果鏈1的元素大于鏈2的元素,則cur2指向鏈2的后一個結(jié)點。</p><p>  如果鏈1的元素等于鏈2的元素,則把這個結(jié)點加入鏈3.然后cur1和cur2都指向鏈的下一個結(jié)

51、點。</p><p>  以此方式遍歷鏈1與鏈2,直到其中一條鏈到達末尾。</p><p><b>  實現(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型交運算:</p><p>  定義兩個結(jié)點cur1和

56、cur2指向鏈1和鏈2都從頭結(jié)點后第一個元素。</p><p>  遍歷鏈2中的結(jié)點,如果cur1的數(shù)據(jù)等于鏈2其中的一個結(jié)點的數(shù)據(jù),則把cur1的數(shù)據(jù)加入鏈3.然后cur1指向鏈1的下一個結(jié)點。</p><p>  以此方式遍歷鏈1,直到鏈到1達末尾。</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>  集合并運算</b></p><p>  Integer型并運算:(Double型String型同理)</p><p>  對鏈1和鏈2進行升序排序,排序后,定義兩個結(jié)點cur1和cur2指向鏈1和鏈2都從頭結(jié)點后第一個元素。</

61、p><p>  如果鏈1的元素小于鏈2的元素,則把cur1的數(shù)據(jù)加入鏈3,然后指向鏈1的后一個結(jié)點。</p><p>  如果鏈1的元素大于鏈2的元素,則把cur2的數(shù)據(jù)加入鏈3,然后指向鏈2的后一個結(jié)點。</p><p>  如果鏈1的元素等于鏈2的元素,則把這個結(jié)點加入鏈3.然后cur1和cur2都指向鏈的下一個結(jié)點。</p><p>  以

62、此方式遍歷鏈1與鏈2,直到其中一條鏈到達末尾。</p><p>  判斷哪一條鏈還沒到達末尾,把這條鏈的剩余結(jié)點數(shù)據(jù)都添加到鏈3.</p><p><b>  實現(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型并運算:</p><p>  定義兩個結(jié)點cur1和cur2指向鏈1和鏈2都從頭結(jié)點后第一個元素。</p><p>

69、;  遍歷鏈2中的所有結(jié)點,如果cur1的數(shù)據(jù)不等于鏈2所有結(jié)點的數(shù)據(jù),則把cur1的數(shù)據(jù)加入鏈3.然后cur1指向鏈1的下一個結(jié)點。</p><p>  以此方式遍歷鏈1,直到鏈到1達末尾。</p><p>  把鏈2所有結(jié)點的數(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>  集合差運算</b></p><p>  以Integer型為

75、例子:(Double和String同理)</p><p>  對鏈1和鏈2進行升序排序,排序后,定義兩個結(jié)點cur1和cur2指向鏈1和鏈2都從頭結(jié)點后第一個元素。</p><p>  遍歷鏈2所有的結(jié)點,如果cur1的數(shù)據(jù)不等于鏈2所有結(jié)點的數(shù)據(jù),則把cur1的數(shù)據(jù)加入鏈3.然后cur1指向鏈1的下一個結(jié)點。</p><p>  以此方式遍歷鏈1,直到鏈到1達

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>  窗體類</b></p><p>  集合元素類型(單選框按鈕組)</p><p>  創(chuàng)建

81、按鈕組,把集合元素類型這三個單項按鈕加入按鈕組,實現(xiàn)單選功能。</p><p>  集合交、并、差運算按鈕</p><p>  以集合并運算按鈕為例:(交、差運算功能按鈕同理)</p><p>  獲取編輯框1的字符串1,編輯框2的字符串2.</p><p>  判斷選擇了哪個單選按鈕,進行對應(yīng)的元素處理</p><p&g

82、t;  創(chuàng)建三個新的鏈表對象,用字符串1和字符串2對鏈1和鏈2初始化。</p><p><b>  集合并運算。</b></p><p>  如果出現(xiàn)字符串重復(fù)或異常錯誤則彈出警告窗</p><p>  更新編輯框的標簽,顯示長度。</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(), "錯誤提示", javax.swing.JOptionPane.ERROR_MESSAGE);</p><p><b>  }</b></p><p>  } else if (doublestyle.isSelected()) { //集合為浮

87、點型</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(), "錯誤提示", 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(), "錯誤提示", 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("輸入集合元素,以空白符隔開");</p><p>  collection2.setToolTipText("輸入集合元素,以空白符隔開");</p><p>  result.setT

96、oolTipText("結(jié)果");</p><p><b>  Search按鈕</b></p><p>  彈出查詢對話框:(jDialog1為查詢對話框的名字)</p><p>  jDialog1.setSize(400, 300);</p><p>  jDialog1.setVisible(

97、true);</p><p>  Collection1和collection2對應(yīng)</p><p>  查詢對話框的Ensure按鈕代碼:</p><p>  判斷選擇了哪個編輯框,對選擇了的編輯框做如下操作:</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; //記錄有幾個相同的字符串</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 + "個,以全部 替換成 \"" + 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; //記錄有幾個相同的字符串</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 + "個,以全部替換成 \"" + change_str + "\"",</p><p>  "查找替換信息Check_Collection2", javax.swing.JOptionPane.PLAIN_MESSAGE);</

111、p><p><b>  排序按鈕</b></p><p>  對result編輯框進行升序排序:(降序同理)</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(), "錯誤提示", 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(), "錯誤提示", 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(), "錯誤提示", javax.swing.JOptionPane.ERROR_MESSAGE);</p><p><b>  }</b></p><

120、;p><b>  }</b></p><p><b>  }</b></p><p><b>  實驗總結(jié)</b></p><p><b>  我負責的工作</b></p><p><b>  結(jié)點類代碼</b></p&g

121、t;<p>  大部分鏈表類算法和代碼</p><p><b>  小部分窗口代碼</b></p><p><b>  問題及討論</b></p><p>  結(jié)點元素的數(shù)據(jù)類型 object與泛型<T></p><p>  最開始的時候試過用object類型定義集合元素,

122、但發(fā)現(xiàn)數(shù)據(jù)用object定義固然方便,但Object類的數(shù)據(jù)只能比較是否相等,而無法比較大小。</p><p>  實現(xiàn)對Integer集合的元素和Double集合的元素進行排序,可以使用泛型定義。使用泛型可使代碼簡明規(guī)范。</p><p>  class Node<T> { //結(jié)點類</p><p><b>  T data;<

123、/b></p><p>  Node next;</p><p><b>  }</b></p><p>  集合元素的分類及其優(yōu)點</p><p>  String型可以包含所以數(shù)據(jù),如果只用String型,程序可變得很簡單。</p><p>  但String 型處理Integer型和D

124、ouble型不方便,無法有效排序,輸入錯誤混入其它數(shù)據(jù)類型容易出現(xiàn)錯誤。</p><p>  所以引入Integer和Double型可以實現(xiàn)排序與排錯,更好地處理數(shù)據(jù)。</p><p>  集合并交差算法的時間復(fù)雜度</p><p>  把集合元素分為Integer、Double、String三種類型后。</p><p>  Integer型

125、和Double型可以進行排序。</p><p>  排序后可以優(yōu)化集合的交、并運算。使運算所花時間大大縮減。</p><p>  排序可見實驗方案及代碼實現(xiàn)的2.5鏈表排序。</p><p>  對比2.7集合的交運算,2.8集合的并運算里面Integer和String實現(xiàn)交并運算的算法。可得出在交運算中,最不理想的條件下,String集合的時間復(fù)雜度為L1.len

126、gth*L2.length。而Integer的時間復(fù)雜度為L1.length+L2.length。</p><p>  由此可看出,Integer的算法運行時間要比String的快很多。在處理大量的數(shù)據(jù)時,Integer的算法的優(yōu)勢更為明顯。</p><p><b>  總結(jié)</b></p><p>  通過這次java課程設(shè)計,讓我體會到了j

127、ava和c++的不同之處。Java與c++相比,java代碼更為簡單便捷。Java雖然沒有指針,但通過在類里定義類成員(類 next),同樣能達到指針的效果,而且更容易操作。</p><p>  通過對鏈表的操作和集合并交差算法的實現(xiàn),讓我更熟悉java的語法,而不是停留在書本上。</p><p>  課程設(shè)計期間,通過翻閱《Netbeans 6.0程序開發(fā)技術(shù)詳解》和《java

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論