java 集合的运算

合集下载

Java依据集合元素的属性,集合相减

Java依据集合元素的属性,集合相减

Java依据集合元素的属性,集合相减两种⽅法:1.集合相减可以使⽤阿帕奇的⼀个ListUtils.subtract(list1,list2)⽅法,这种⽅法实现必须重写集合中对象的属性的hashCode和equals⽅法,集合相减判断的会调⽤equals⽅法,这种⽅法的好处是可以重写多个属性的hashCode和equals⽅法,也就是说⽤阿帕奇集合相减⽐较多个属性的⽐较灵活多样。

带来的问题也⽐较明显,重写hashCode和equals⽅法后,在使⽤hashMap时要特别注意。

2.⾃⼰实现⼀个集合相减的⽅法。

⽤hashMap实现这种⽅法不需要重写hashCode和equals⽅法,但是只能对⼀个属性进⾏⽐较相减。

/*** 依据集合元素的属性,从list1中减去list2中存在的元素,** @param list1* @param list2* @param argumentName* @return*/public static <T> List<T> subtractList(List<T> list1, List<T> list2, String argumentName) {List<T> result = new ArrayList<T>();if (CollectionUtils.isEmpty(list1)) {return result;}if (CollectionUtils.isEmpty(list2)) {return list1;}Map<Object, T> map = initMap(list2, argumentName);for (T t : list1) {BeanWrapper beanWrapper = new BeanWrapperImpl(t);Object value = beanWrapper.getPropertyValue(argumentName);if (map.get(value) == null) {result.add(t);}}return result;}private static <T> Map<Object, T> initMap(List<T> list2, String argumentName) {Map<Object, T> resultMap = new HashMap<Object, T>(list2.size());for (T t : list2) {BeanWrapper beanWrapper = new BeanWrapperImpl(t);if (beanWrapper.getPropertyValue(argumentName) == null) {throw new RuntimeException("argumentName is null");}resultMap.put(beanWrapper.getPropertyValue(argumentName), t);}return resultMap;}依据⾃⼰的业务需求,⾃⾏选择。

集合的运算与运算法则

集合的运算与运算法则

集合的运算与运算法则在数学中,集合是最基本的概念之一。

集合是由一些确定的元素所组成的。

对于一个集合而言,可以对它进行不同的运算。

那么集合的运算有哪些呢?它们又有哪些运算法则呢?本文将为大家详细讲解。

一、集合的基本运算1. 并集运算并集运算指的是将两个或多个集合的元素合并成一个新的集合。

例如:集合A={1,2},集合B={2,3,4},则集合A和B的并集为{1,2,3,4}。

2. 交集运算交集运算是指将两个或多个集合中公共元素取出来组成一个新的集合。

例如:集合A={1,2,3},集合B={2,3,4},则集合A和B的交集为{2,3}。

3. 差集运算差集运算是指将一个集合中属于另一个集合的元素从该集合中去除。

例如:集合A={1,2,3},集合B={2,3,4},则集合A和B的差集为{1}。

4. 补集运算补集运算指的是在一个全集中,去掉一个集合后得到的剩余部分。

假设有集合A={1,2,3},全集U={1,2,3,4,5},则集合A的补集为{4,5}。

五个符号来表示集合的基本运算:并集运算:A ∪ B交集运算:A ∩ B差集运算:A - B补集运算:A’集合相等:A=B二、集合的运算法则1. 并集运算的法则①结合律:对于任意的集合A、B和C来说,(A∪B)∪C=A∪(B∪C)。

②交换律:对于任意的集合A和B来说,A∪B=B∪A。

③分配律:对于任意的集合A、B和C来说,A∪(B∩C)=(A∪B)∩(A∪C)。

④恒等律:对于任意的集合A来说,A∪Φ=A。

2. 交集运算的法则①结合律:对于任意的集合A、B和C来说,(A∩B)∩C=A∩(B∩C)。

②交换律:对于任意的集合A和B来说,A∩B=B∩A。

③分配律:对于任意的集合A、B和C来说,A∩(B∪C)=(A∩B)∪(A∩C)。

④恒等律:对于任意的集合A来说,A∩U=A。

3. 差集运算的法则①差集运算的定义:对于任意的集合A和B来说,A-B={x|x∈A 且 x∉B}。

java中list的聚合函数算法

java中list的聚合函数算法

java中list的聚合函数算法Java中的List是一种非常常用的数据结构,它可以存储任意类型的数据,并且可以进行各种操作。

其中,聚合函数是一种非常重要的操作,可以对List中的元素进行汇总、统计或者计算。

在本文中,我们将介绍Java中List的聚合函数算法,并逐步回答与之相关的问题。

首先,让我们了解一下List的聚合函数的基本概念。

聚合函数是一种对数据进行汇总、统计或计算的函数。

在SQL语言中,聚合函数包括SUM(求和)、COUNT(计数)、AVG(平均值)、MIN(最小值)和MAX(最大值)等。

在Java中,我们可以通过一些算法来实现这些聚合函数的功能。

在Java中,实现聚合函数的算法并不复杂。

我们可以通过遍历List,使用循环来逐个访问List中的元素,并进行相应的操作。

接下来,我们将以不同的聚合函数为例,来具体讲解其算法和实现。

首先,我们来看一下求和(SUM)的算法。

求和函数的作用是将List中的所有元素进行累加,并返回累加结果。

我们可以通过遍历List,并使用一个变量来保存累加的结果。

具体的算法如下:1. 初始化一个变量sum,用来保存累加结果。

2. 遍历List,对于每一个元素,将其加到sum中。

3. 返回sum作为求和的结果。

代码示例:javaList<Integer> list = Arrays.asList(1, 2, 3, 4, 5);int sum = 0;for (int num : list) {sum += num;}System.out.println("Sum: " + sum);接下来,让我们来看一下计数(COUNT)函数的算法。

计数函数的作用是统计List中元素的个数,并返回统计结果。

我们可以通过遍历List,并使用一个变量来保存计数结果。

具体的算法如下:1. 初始化一个变量count,用来保存计数结果。

2. 遍历List,对于每一个元素,将count加一。

java set集合遍历的方式

java set集合遍历的方式

Java Set集合遍历的方式一、Set集合简介Set是Java中的一种集合类型,它继承自Collection接口,是一种不允许包含重复元素的集合。

Set集合中的元素是无序的,不像List集合有索引来访问元素,Set集合主要用于去重和判断元素是否存在。

Java提供了多种Set集合的实现类,常用的有HashSet、LinkedHashSet和TreeSet。

在对Set集合进行遍历时,我们可以使用不同的方式来访问集合中的元素。

二、Set集合的遍历方式1. 使用迭代器遍历Set集合迭代器是Java集合框架提供的一种用于遍历集合的通用方式。

我们可以通过调用Set集合的iterator()方法获取一个迭代器对象,然后使用while循环和迭代器的hasNext()和next()方法来遍历Set集合中的元素。

Set<String> set = new HashSet<>();set.add("apple");set.add("banana");set.add("orange");Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {String element = iterator.next();System.out.println(element);}2. 使用增强for循环遍历Set集合增强for循环也是一种常用的遍历集合的方式,它可以更简洁地遍历集合中的元素。

我们可以直接使用增强for循环来遍历Set集合,无需显式地使用迭代器。

Set<String> set = new HashSet<>();set.add("apple");set.add("banana");set.add("orange");for (String element : set) {System.out.println(element);}3. 使用forEach()方法遍历Set集合Java 8引入了新的forEach()方法,可以更方便地遍历集合中的元素。

java jts 点位聚合运算

java jts 点位聚合运算

java jts 点位聚合运算JTS(Java Topology Suite)是Java语言编写的开源地理信息系统库,提供了进行几何计算和空间分析的功能。

JTS库中提供了点位聚合运算的方法,即将一组点位合并成一个点位表示聚合后的结果。

点位聚合运算是空间分析中常用的操作,可以用来进行数据简化、空间聚类等应用。

下面是使用JTS库进行点位聚合运算的步骤:1. 创建一个空的点集合;2. 将所有要聚合的点位添加到集合中;3. 创建一个几何平均值算法对象;4. 对点集合进行聚合操作,得到聚合后的点位。

示例代码如下:``` javaimport com.vividsolutions.jts.geom.Coordinate;import com.vividsolutions.jts.geom.GeometryFactory;import com.vividsolutions.jts.geom.Point;import com.vividsolutions.jts.geom.util.GeometryCombiner; import com.vividsolutions.jts.operation.distance.DistanceOp; import java.util.ArrayList;import java.util.List;public class PointAggregationExample {public static void main(String[] args) {List<Coordinate> pointList = new ArrayList<>();pointList.add(new Coordinate(10, 20));pointList.add(new Coordinate(20, 30));pointList.add(new Coordinate(30, 40));pointList.add(new Coordinate(40, 50));GeometryFactory geometryFactory = new GeometryFactory(); GeometryCombiner geometryCombiner = new GeometryCombiner(geometryFactory);List<Point> pointCollection = new ArrayList<>();for (Coordinate coordinate : pointList) {pointCollection.add(geometryFactory.createPoint(coordinate));}Point aggregatedPoint = (Point)bine(pointCollection);System.out.println("Original Points:");for (Point point : pointCollection) {System.out.println(point.getX() + "," + point.getY());}System.out.println("Aggregated Point:");System.out.println(aggregatedPoint.getX() + "," + aggregatedPoint.getY());}}```运行以上代码,将输出如下结果:```Original Points:10.0,20.020.0,30.030.0,40.040.0,50.0Aggregated Point:25.0,40.0```该示例代码演示了如何将一个含有4个点位的集合聚合成一个点位。

java的list集合中字段为空的列处理方法

java的list集合中字段为空的列处理方法

java的list集合中字段为空的列处理方法《Java List集合中字段为空的列处理方法》在日常的Java编程中,使用List集合经常会遇到处理字段为空的列的问题。

这个问题常常出现在需要对列表中的数据进行处理或计算时,如果遇到空字段,就会引发空指针异常。

为了避免这种情况的发生,需要对字段为空的列进行有效的处理。

处理空字段的方法有多种,下面将介绍几种常用的处理方式。

1. 使用if语句进行判断:这是一种最为常见的处理方式。

通过使用if语句来判断字段是否为空,然后针对不同的情况进行不同的处理。

例如:```for (Object obj : list) {if (obj != null) {// 对非空字段进行处理} else {// 对空字段进行处理}}```2. 使用三目运算符进行处理:三目运算符可以替代if语句,使代码更加简洁。

例如:```for (Object obj : list) {String value = (obj != null) ? obj.toString() : "";// 对value进行处理}```3. 使用Optional类进行处理:Optional类是Java 8引入的新特性,用于处理空值情况。

可以使用Optional类的方法对空字段进行处理。

例如:```for (Object obj : list) {Optional<Object> optional = Optional.ofNullable(obj);optional.ifPresent(o -> {// 对o进行处理});}```4. 使用流式操作进行处理:如果你熟悉Java 8中的流式操作,你可以使用流式操作来过滤空字段,然后对非空字段进行处理。

例如:```list.stream().filter(Objects::nonNull).forEach(obj -> {// 对obj进行处理});```以上是几种常用的处理Java List集合中字段为空的列的方法。

java常用集合使用方法

java常用集合使用方法

java常⽤集合使⽤⽅法1.初步尝试java中的集合使⽤⽅式:public static void main( String [] args ){//List 对象User user=User.builder().id(0).name("huhua"+0).build();//a.最常见Add的初始化⽅式List<User> users=new ArrayList<User>();for (int i=0;i<100;i++){users.add(User.builder().id(i).name("huhua"+i).build());}//b.使⽤双花括号在初始化的同时赋值List<User> users2= new ArrayList<User>() {//这个⼤括号就相当于我们 new 接⼝{//这个⼤括号就是构造代码块会在构造函数前调⽤this.add(new User(0,"huahua0"));this.add(new User(1,"huahua1"));}};//c.利⽤Lists⼯具类 https:///google-guava///c1. Lists 提供了两个⽅法:⼀个是创建⼀个空列表;。

List<String> list1 = Lists.newArrayList();list1.add("str1");list1.add("str2");list1.add("str3");//c2.⼀个是创建空列表的同时遍历迭代器,将它的值添加到列表中List<String> list2 = Lists.newArrayList(list1.iterator());//d. 利⽤Arrays⼯具类List<String> arrList= Arrays.asList( new String[]{"huahu0","huahau1","huahua2"});//e.Collections 还提供了⼀个为 List ⼀次性添加所有元素的⽅法,弥补了原先 List 只能添加 Collections,⽽不⽀持数组的缺憾。

Java集合的流Stream操作(快速筛查,统一处理)

Java集合的流Stream操作(快速筛查,统一处理)

Java集合的流Stream操作(快速筛查,统⼀处理)说明Java中的集合流操作需要java 8的特性⽀持。

需要对Lambda表达式有所了解主要作⽤:1. 快速筛查集合元素2. 统⼀对集合元素处理说⽩了就是原来的要⼤量循环的操作可以使⽤流操作快速完成假设条件之后的代码演⽰将于以下的假设条件来模拟表⽰存在Message类public class Message{String value;int code;}存在ShortMessage类public class ShortMessage{String value;}Tools类中存在⽅法public static ShortMessage convert(Message msg){return new ShortMessage(msg.getValue);}存在⼀个数组,⾥⾯存在⼤量已经实例化的Message对象List<Message> messageList;省略get、set及构造函数⽆营养代码filter操作作⽤:快速筛查,过滤元素留下符合要求的元素⽣成⼀个新的流假设存在//快速筛查出value属性包含‘bug’的message对象messageList = messageList.parallelStream()//转为并⾏流,多线程.filter(msg -> msg.getValue().contains("bug"))//筛查.collect(Collectors.toList());//流转回listmsg 相当于循环messageList中的每⼀个Message实例对象的临时引⽤filter返回的还是⼀个stream,所以是可以⼀直链式调⽤操作的,⽐如⼀直.filter.filter过滤filter操作接受的是⼀个Predicate逻辑表达式,既结果是⼀个布尔结果,为true的保留map操作作⽤:统⼀处理map操作理解起来有点复杂,请看以下例⼦假设我们需要将messageList⾥⾯的所有实例转为ShortMessage对象⼀般处理流map 处理⽅式所以说,map 操作可以了解为需要对⼀个流中的元素统⼀处理时的操作,会将流中的每⼀个元素循环调⽤⽅法作为参数传递进去注意map 中的⽅法多次执⾏返回也是⼀个流,⽽这个流的存储的元素的类型是会变化的,具体看调⽤⽅法的返回类型map 返回的流也是可以继续链式调⽤的当然也可以这样,相信下⾯的代码不需要我解释假设我们需要将所有的Message 对象的code 加100记住,流操作⾥⾯的只要是个Lambda 表达式就可以flatMap 操作这个说明⼀下,以免以后忘记map 操作可以看到可以了解为⼀对⼀映射操作,每输⼊⼀个元素,则按map 中的⽅法规则处理转换为另外⼀个元素,但有的时候是⼀对多操作的;如果从字⾯意思上理解,就是map 的扁平化操作⼀般⽤在复合数组上⾯,flatMap 会将流中的每⼀个元素再转为流操作简单例⼦说明假设存在修改Message 类测试数据List<ShortMessage> shorts = new ArrayList<>();for(Message msg:messageList){shorts.add(Tools.convert(msg));}List<ShortMessage> shots = messageList.parallelStream().map(Tools::convert).collect(Collectors.toList());List<ShortMessage> shorts = messageList.parallelStream().filter(msg -> msg.getValue().contains("bug")).map(Tools::convert).collect(Collectors.toList());messageList = messageList.parallelStream().map(msg -> msg.setCode(msg.getCode()+100)).collect(Collectors.toList());List<List<Message>> list;//如果list.parallelStream().flatMap(child -> child.stream());//那么A 表⽰list 中的⼦集合的流,-> 后⾯必须产⽣⼀个新的流,最终;flatMap 会产⽣⼀个合并出来的⼤的流public class data{int x;int y;}public class Message{String value;int code;Data[] datas;/***[]数组和List 是两回事,这⾥这个⽅法只是演⽰如果data 是List 类型情况下*/public List<Data> getDataArray(){return Arrays.asList(data.clone());}}Message m1 = new Message("message 1", new Data[]{new Data(3, 2), new Data(3, 2), new Data(3, 2)});Message m2 = new Message("message 2",new Data[]{new Data(4, 2), new Data(6, 2), new Data(3, 2)});Message m3 = new Message("message 3",new Data[]{new Data(5, 2), new Data(4, 2), new Data(4, 2)});Message m4 = new Message("message 4",new Data[]{new Data(6, 2), new Data(3, 2), new Data(3, 2)});Message m5 = new Message("message 5",new Data[]{new Data(7, 2), new Data(2, 2), new Data(7, 2)});Message m6 = new Message("message 6",new Data[]{new Data(8, 2), new Data(45, 2), new Data(3, 2)});List<Message> messageList = Arrays.asList(m1, m2, m3, m4, m5, m6);现在就是说,有⼀个messageList保存多个Message对象,每个Message对象操作⼀个Data类型数组⼀、找出所有x值为3的Data对象List<Data> collect = messageList.parallelStream().map(Message::getDatas)//把data取出来,创建⼀个全是data[]的流.flatMap(Arrays::stream)//转为流,注意会合并,创建⼀个全是data的流.filter(data -> data.getX() == 3)//筛查.collect(Collectors.toList());换种写法,如果是list操作会更简单List<Data> collect1 = messageList.parallelStream().flatMap(msg -> msg.getDataArray().stream()).filter(data -> data.getX() > 3).collect(Collectors.toList());⼆、获取所有的X的值List<Integer> integerList = messageList.parallelStream().flatMap(ss -> ss.getDataArray().stream()).map(Data::getX).collect(Collectors.toList());剩下的就不⼀⼀举例了,可以发现flatMap其实可以理解为合并处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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);}}。

相关文档
最新文档