Java程序设计课程实验报告课题:集合的运算指导老师:陈金辉学院:信息与控制学院专业:系统工程班级:系统1班学号: 20091325019姓名:陆蒙蒙完成时间:2011年05月08日Java程序设计课程实验报告课题:集合的运算指导老师:陈金辉班级:系统1班完成人姓名:陆蒙蒙学号:20091325019完成时间:2011年05月08日题目要求:运用java语言实现两个集合的交、并、差运算。
功能描述:(1) 输出两个集合的交集(2) 输出两个集合的并集(3) 输出两个集合的差集概要设计:集合的运算是常用的数学计算,为了更加方便的进行此类运算,在此设计了一个简单的集合运算java程序,用于对集合间的交、并、差运算。
本程序运用数组代表集合,主要运用循环语句和方法调用,通过对集合元素间的逐个比较,输出符合条件的元素,从而实现运算结果输出。
该java程序简单,清晰,明了,用户易懂易用,能较好得实现集合间的简单运算。
详细设计:(1)程序:public class Collect {private int arr1[],arr2[];public Collect(int arrayNumber1[],int arrayNumber2[]){arrayNumber1=arr1;arrayNumber2=arr2; }Collect(Collect d){arr1=d.arr1;arr2=d.arr2; }功能:首先定义一个Collect类,然后定义了两个私有的类对象。
然后定义个两个不同参数的Collect类的构造方法。
(2)程序:public static void methodPrint(int[] arr,int len){int i;for(i=0;i<len-1;i++){ System.out.print(arr[i]+","); //除最后一个元素外,其他每个元素后面应该加一个逗号以示间隔}System.out.println(arr[i]); //最后一个元素不要加逗} 功能:编写了一个methodPrint方法,以数组名arr[]和数组实际元素的个数len为参数,用于输出数组,即输出集合。
(3)程序:public static void methodJiaoji(int[] arrayFirst,int[] arraySecond){ int k=0;int newArray[];newArray=new int[20];for(int i=0;i<arrayFirst.length;i++){for(int j=0;j<arraySecond.length;j++){if(arraySecond[j]==arrayFirst[i]){newArray[k++]=arraySecond[j];}}}methodPrint(newArray,k);}功能:编写方法methodJiaoji,用于实现两个集合的交运算。
实现方法为先定义一个新数组,然后用第一个数组的每一个元素去和第二个数组的所有元素比较,如果能在第二个数组中找到此元素,就把这个元素赋给新数组,最后调用方法输出新数组。
(4)程序:public static void methodBingji(int[] arrayFirst,int[] arraySecond){ int k=0;int newArray[];newArray=new int[20];boolean yes;for(int i=0;i<arrayFirst.length;i++){ newArray[k++]=arrayFirst[i];} //先把第一个数组赋到新数组中for(int i=0;i<arraySecond.length;i++){ yes=true;for(int j=0;j<arrayFirst.length;j++){ if(arraySecond[i]==arrayFirst[j]){ yes=false;break;}}if(yes) newArray[k++]=arraySecond[i];}methodPrint(newArray,k);}功能:编写方法methodBingji,用于实现两个集合的并运算。
实现方法为先定义一个新数组,先把第一个数组中的元素全部赋到新数组中。
然后用第二个数组的每一个元素去和第一个数组的所有元素比较,如果第一个数组中没有该元素,就把这个元素继续接着赋给新数组,最后调用方法输出新数组。
(5)程序:public static void methodChaji(int[] arrayFirst,int[] arraySecond){ int k=0;int newArray[];newArray=new int[20];boolean yes;for(int i=0;i<arrayFirst.length;i++){ yes=true;for(int j=0;j<arraySecond.length;j++){ if(arraySecond[j]==arrayFirst[i]){ yes=false;break;}}if(yes)newArray[k++]=arrayFirst[i];}methodPrint(newArray,k);}功能:编写方法methodChaji,用于实现两个集合的差运算。
实现方法为先定义一个新数组,然后用第一个数组的每一个元素去和第二个数组的所有元素比较,如果第二个数组中没有该元素,就把这个元素继续接着赋给新数组,如果第二个数组中有该元素则不赋值,break跳出直接进行下一个循环。
最后调用方法输出新数组。
(6)程序:public static void main(String[] args){int array1[]={1,2,3,4,5,6,7,8,9,10};int array2[]={5,6,7,8,9,10,11,12,13,14,15};int i,j;Collect number=new Collect(array1,array2);System.out.print("集合A为:"); /*输出集合A*/for(i=0;i<array1.length;i++)System.out.print(array1[i]+" ");System.out.println();System.out.print("集合B为:"); /*输出集合B*/for(j=0;j<array2.length;j++)System.out.print(array2[j]+" ");System.out.println();System.out.print("交集A∩B为:"); /*输出集合A∩B*/number.methodJiaoji(array1,array2);System.out.print("并集A∪B为:"); /*输出集合A∪B*/number.methodBingji(array1,array2);System.out.print("差集A-B为:"); /*输出集合A-B*/number.methodChaji(array1,array2);System.out.print("差集B-A为:"); /*输出集合B-A*/number.methodChaji(array2,array1);功能:编写main函数,实例化两个数组,然后先以集合的形式输出这两个数组,然后通过调用之前编写的类方法,实现并输出集合的交、并、差运算。
流程图:程序设计的效果截图:心得体会:在这大半个学期里,我在专业老师陈金辉的带领下进行了Java课程及上机实验的学习。
在这之前,因为我们已经学过C语言和计算机基础这两门课程,对编程有了一定的了解,所以相对而言Java上手得还比较快。
再加上Java没有指针,我觉得这门语言更好学也更实用了。
程序的理解和调试有时还是很复杂的,我一开始弄得有点烦躁,可后来在通过自己的慢慢摸索,错误越来越少的时候,我越来越能体会到其中的乐趣,也越来越有信心了,所以这学期的上机实验课我总是尽力在课堂内就完成了,很开心啊!这次做集合的运算我也是折腾了好久,一开始老是调用方法不成功,还有把在整个数组作为参数传递给方法不会用,后来在java考试复习中才从课外书上看到了相关的方法,顿时豁然开朗,问题也迎刃而解了!所以以后要想把一门语言学精真的要多钻研啊。
当我把自己的程序运行出来之后我特别开心,虽然程序中还有很多布完善的地方,但我知道自己进步了,并且收获很大。
上机实验是学习程序设计语言必不可少的实践环节,特别是java 语言灵活、简洁,更需要通过编程的实践来真正掌握它。
学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
通过程序设计课程的学习,我觉得我加深对课堂讲授内容的理解和对于语法知识有了感性的认识,加深对它的理解。
通过这次程序设计课程,对于一些内容自己认为在课堂上听懂了,但上机实践中我发现了自己原来很多地方有理解的偏差,得到了很好的纠正。
此外,完成程序的编写,决不意味着万事大吉。
也许我们认为万无一失的程序,实际上机运行时可能不断出现麻烦。
如编译程序检测出一大堆错误。
有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。
开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。
程序的调试是一个技巧性很强的工作,有的时候一个小的错误就会消耗我们很久的时间,所以耐心非常重要。
最后,希望我能够在今后的java语言学习中不弃不馁,勤奋刻苦,不断自我总结经验和心得,以取得优异的成绩。
参考文献:《Java程序设计》(第二版)谭浩强主编《Java程序设计大全》【美】Joyce Farrell 主编附录源程序:public class Collect {private int arr1[],arr2[];public Collect(int arrayNumber1[],int arrayNumber2[]){arr1=arrayNumber1;arr2=arrayNumber2;}Collect(Collect d){arr1=d.arr1;arr2=d.arr2;}public static void methodPrint(int[] arr,int len){int i;for(i=0;i<len-1;i++)System.out.print(arr[i]+",");//除最后一个元素外,其他每个元素后面应该加一个逗号以示间隔System.out.println(arr[i]);//最后一个元素不要加逗号,}public void methodJiaoji(int[] arrayFirst,int[] arraySecond){int k=0;int newArray[];newArray=new int[20];for(int i=0;i<arrayFirst.length;i++){for(int j=0;j<arraySecond.length;j++){if(arraySecond[j]==arrayFirst[i]){newArray[k++]=arraySecond[j];}}}methodPrint(newArray,k);}public void methodBingji(int[] arrayFirst,int[] arraySecond){int k=0;int newArray[];newArray=new int[20];boolean yes;for(int i=0;i<arrayFirst.length;i++){newArray[k++]=arrayFirst[i];}for(int i=0;i<arraySecond.length;i++){yes=true;for(int j=0;j<arrayFirst.length;j++){if(arraySecond[i]==arrayFirst[j]){yes=false;break;}}if(yes)newArray[k++]=arraySecond[i];}methodPrint(newArray,k);}public void methodChaji(int[] arrayFirst,int[] arraySecond){ int k=0;int newArray[];newArray=new int[20];boolean yes;for(int i=0;i<arrayFirst.length;i++){yes=true;for(int j=0;j<arraySecond.length;j++){if(arraySecond[j]==arrayFirst[i]){yes=false;break;}}if(yes)newArray[k++]=arrayFirst[i];}methodPrint(newArray,k);}public static void main(String[] args){int array1[]={1,2,3,4,5,6,7,8,9,10};int array2[]={5,6,7,8,9,10,11,12,13,14,15};int i,j;Collect number=new Collect(array1,array2);System.out.print("集合A为:"); /*输出集合A*/ for(i=0;i<array1.length;i++)System.out.print(array1[i]+" ");System.out.println();System.out.print("集合B为:"); /*输出集合B*/ for(j=0;j<array2.length;j++)System.out.print(array2[j]+" ");System.out.println();System.out.print("交集A∩B为:"); /*输出集合A∩B*/ number.methodJiaoji(array1,array2);System.out.print("并集A∪B为:"); /*输出集合A∪B*/ number.methodBingji(array1,array2);System.out.print("差集A-B为:"); /*输出集合A-B*/ number.methodChaji(array1,array2);System.out.print("差集B-A为:"); /*输出集合B-A*/ number.methodChaji(array2,array1);}}。