Java:集合的并、交和差运算

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

课程设计课程名称Java语言课程设计题目名称集合的并、交和差运算学生学院应用数学学院专业班级信息安全(1)班学号学生姓名指导教师2013年10月25日一、题目要求:用Java语言实现单链表的基本操作,并实现集合的交、并和差运算。二、程序功能定义:1、输出两个集合的交集,即找出两个集合的相同元素。2、输出两个集合的并集,即把两个集合的全部元素不重复的加起来。3、输出两个集合的差集,即从一个集合中找出另一个集合里没有的元素。三、设计思路:程序1:单链表结点publicclassNodeT//单链表结点类,T指定结点的元素类型{publicTdata;//数据域,保存数据元素publicNodeTnext;//地址域,引用后继结点publicNode(Tdata,NodeTnext)//构造结点,data指定数据元素,next指定后继结点{this.data=data;this.next=next;}publicNode(){this(null,null);}}程序2:importjava.util.ArrayList;publicclassSinglyListT{publicNodeThead;publicintlength;//以上为默认构造方法,构造空单链表publicstaticArrayListStringunion=newArrayListString();publicSinglyList(){this.head=newNodeT();}//以上为构造单链表publicSinglyList(T[]element){this();//创建空单链表,只有头结点this.length=element.length;NodeTrear=this.head;//rear指向单链表最后一个结点for(inti=0;ielement.length;i++)//若element==null,跑出空对象异常;element.length==0时,构造空链表{rear.next=newNodeT(element[i],null);//创建结点链入rear结点之后rear=rear.next;//rear指向性的链尾结点}}publicStringtoString(){Stringstr=(;NodeTp=this.head.next;while(p!=null){str+=p.data.toString();if(p.next!=null){str+=,;}//不是最后一个结点时,后加分隔符p=p.next;}returnstr+);//空表返回()}publicStringaddAll(SinglyListlist){NodeTp=this.head.next;Stringstr=(;while(p!=null){NodeTq=list.head.next;while(q!=null){if(p.data.toString().equals(q.data.toString()))//集合的元素值相等{if(!str.equals(()){str+=,;}//用逗号间隔str+=p.data.toString();this.union.add(p.data.toString());}q=q.next;}p=p.next;}returnstr+);}//以上为求交集过程。publicStringunion(SinglyListlist){NodeTp=this.head.next;Stringstr=(;while(p!=null){NodeTq=list.head.next;inti=0;while(q!=null){if(!p.data.toString().equals(q.data.toString())){i++;if(i==list.length){for(inta=0;aunion.size();a++){if(!p.data.toString().equals(union.get(a))&a==union.size()-1){if(!str.equals(())str+=,;str+=p.data.toString();}}}}q=q.next;}p=p.next;i=0;}NodeTw=list.head.next;while(w!=null){str+=,;str+=w.data.toString();w=w.next;}returnstr+);}//以上为求并集过程。publicStringdifference(SinglyListlist){NodeTp=this.head.next;Stringstr=(;while(p!=null){NodeTq=list.head.next;inti=0;while(q!=null){if(!p.data.toString().equals(q.data.toString())){i++;if(i==list.length){if(!str.equals(())str+=,;str+=p.data.toString();}}q=q.next;}p=p.next;i=0;}returnstr+);}}//以上为求差集过程。程序3:importjava.util.Scanner;publicclassMainClass{publicstaticvoidmain(String[]args){inta,b;Scannercin=newScanner(System.in);System.out.print(请输入集合A的元素(用英文逗号间隔):);Stringa_string=cin.nextLine();String[]suma=a_string.split(,);System.out.print(请输入集合B的元素(用英文逗号间隔):);Stringb_string=cin.nextLine();String[]sumb=b_string.split(,);SinglyListStringlist1=newSinglyListString(suma);SinglyListStringlist2=newSinglyListString(sumb);System.out.println(集合A和集合B的交集为:+list1.addAll(list2));System.out.println(集合A和集合B的并集为:+list1.union(list2));System.out.println(A与B的差集为:+list1.difference(list2));System.out.println(B与A的差集为:+list2.difference(list1));}}四、程序运行输出图:五、程序的特点与优点:1、两个集合中的元素无要求,可以是数字、字母或混合,元素个数可以相等也可以不相等,可以为空集。2、一个集合中的元素可以一次性输入完成,只需用英文逗号间隔。3、输出的结果是集合形式。4、如果元素是字母,区分大小写。六、程序的不足与遗憾:1、集合中的元素不支持中文,否则无法识别。2、输入集合的元素时,如果用中文逗号间隔,会有无法表达的错误与不和谐。3、当集合交集为空集时,输出的是“()”而不是“空集”。七、程序设计过程中的改进:1、刚开始在集合的输入方式上,使用了较麻烦的输入方法,就是先确定集合的元素个数,再逐个输入元素,步骤比较繁琐,代码如下:inta,b;Scannercin=newScanner(System.in);System.out.print(请输入集合A的元素个数:);a=cin.nextInt();Integer[]A=newInteger[a];System.out.println(请输入集合A的元素);for(inti=0;ia;i++){A[i]=cin.nextInt();}System.out.print(请输入集合B的元素个数);b=cin.nextInt();Integer[]B=newInteger[b];System.out.println(请输入集合B的元素);for(inti=0;ia;i++){B[i]=cin.nextInt();}2、集合元素的数据类型由整型改为了字符串。3、求并集时,当代码如下时,会出现两元素中同时有两个分隔号的情况。while(p!=null){str+=p.data.toString();if(p.next!=null){str+=,;}p=p.next;}将“str+=p.data.toString();”放到if语句之后就不会出现了。八、心得体会:在学习Java程序设计的半个学期中,给我最大的感受就是Java比C++更容易理解和上手。Java的语法与C++的语法相似,但删去了C++中令人费解的、不常用的指针和运算符重载等成分,使得我上手比较快。其实我觉得不管学习什么编程语言,在编写程序的过程中,出现错误总是不可避免的,有时一个低级错误都会让人折腾一个晚上也没有发现,如果一烦躁,那么就输了。在编写程序的时候,要集中精神保持思维条理的清晰性,有一个能让人安静投入的环境,能大大避免低级错误的出现。同时对待错误的出现要耐心,当在某一次改错之后,程序成功运行了,我心里真的是无比的激动与兴奋。另外我觉得和同学交流学习也是一个不错的方法。大家的知识水平也许是差不多的,但知识面会有不同,通过交流可以了解更多的编程技巧,尤其是在程序出现错误的时候,给同学看一看,有时自己一个晚上找不出的错误,别人看一眼就发现了。几次的编程练习,给了我一个很大的感受,编写程序时,把思路设计出来不是最重要的,把代码完美写出来没有调试出错误也不是最重要的,最重要的是要善于思考,同一个效果的实现,却可以有不同的方法,我应该要想出更有效率的方法。Java博大精深,除了要学习课本的知识,更要钻研其他优秀的书本,自己的思维才会打开,能力才会有所提高。现在我在使用Java语言编写程序的时候,还不能达到熟练的程度,往往要参照着书本或其他相关资料才能比较好地去完成编写。所以我更要勤于实践练习,才能驾驭好强大的Java语言。

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功