Java-数组实验

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

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

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

资源描述

实验七数组一实验目的1.掌握数组相关常用算法2.掌握方法的定义和调用二实验内容1.使用程序生成两行随机整数,整数之间用逗号分隔,并写入文本文件data.txt中。Math.random()返回0-1之间的随机数,通过乘以n并取整可得到0~n-1之间的随机数。打开文件、关闭文件和写入文件的代码如下:BufferedWriterbw=newBufferedWriter(newFileWriter(“data.txt”));//打开文件bw.write(newInteger(x));//输出数据到文件bw.close();//关闭文件另外,bw.newLine()可在文件中输出换行符。写入数据类:packageexp7(FileWrite);importjava.io.BufferedWriter;importjava.io.FileWriter;importjava.io.IOException;publicclassFileWrite{publicFileWrite(StringfileName,intn,intsize)throwsIOException{//n为需要写入的几行数,size为一行有多少个数字BufferedWriterbw=newBufferedWriter(newFileWriter(fileName));//创建字符流for(intj=1;j=n;j++){for(inti=1;i=size;i++){intrandom=(int)(100*Math.random());//产生0-100之间的随机数Stringst=random+;//将整型转化为字符型数据bw.write(st);//写入文件if(i=size-1)bw.write('\t');//在每个数据后面写入“制表位”}bw.newLine();//另起一行}bw.close();//关闭文件输出流}publicFileWrite(int[]tar,StringfileName)throwsIOException{BufferedWriterbw=newBufferedWriter(newFileWriter(fileName));for(inti=0;itar.length;i++){Stringst=tar[i]+;bw.write(st);if(itar.length-1)bw.write('\t');}bw.close();System.out.println(文件写入成功!!!);}}读出数据类(ReadData)packageexp7;importjava.io.BufferedReader;importjava.io.FileReader;importjava.io.IOException;importjava.util.ArrayList;importjava.util.Scanner;publicclassReadData{publicstaticArrayListint[]readData(StringfileName)throwsIOException{//创建ArrayList集合用于返回数组对象Scannersc=newScanner(newBufferedReader(newFileReader(fileName)));//读入制定路径的文件ArrayListint[]al=newArrayListint[]();//创建ArrayList集合while(sc.hasNextLine()){//循环读出每行数据,并将每行数据装入数组中,再将数据装入集合中Stringst=sc.nextLine();//一次性读取整行数据StringstrArr[]=st.split(\t);//根据制表位分割数组intlengths=strArr.length;//定义数组的长度intstrToInt[]=newint[lengths];//创建用于存储数字的整形数组for(inti=0;istrArr.length;i++){strToInt[i]=Integer.parseInt(strArr[i]);//将字符型数据转化为整型数据}al.add(strToInt);//将两个数组存入集合中}inta[]=al.get(0);returnal;//返回集合对象}}2.读取第一题生成的data.txt文件中的第一行整数存放到整型数组a中。已知System.currentMillis()方法可返回从1970年1月1日到系统当前时间所经过的毫秒数。通过在算法代码执行前后分别调用该方法并求其差值,可定量测量代码的执行时间。使用实验六第三题的三种排序算法分别对数组a进行排序,输出排序代码执行耗费的时间,并分析。为了得到测量数据,整数的数量应该足够大。表格中第一行为参与排序的数据个数,需要填写排序耗费的时间。100100010000冒泡排序1257545选择排序852281快速排序10551093.读取第一题生成的data.txt文件中的整数分别存放到两个整型数组a和b中。分别对a和b进行排序,然后将a和b中的数据合并到新数组c中并保持数据有序。最后将排序后的数据写入到结果文件result.txt中。方法一在合并的过程中排序合并类(SortAndSort):packageexp7;importexp6.ArraySort;importjava.io.FileNotFoundException;importjava.io.IOException;publicclassSortAndSort{publicstaticint[]afterSort(int[]a,int[]b)throwsFileNotFoundException{intlength=a.length+b.length;intc[]=newint[length];System.arraycopy(a,0,c,0,a.length);//将a数组的元素复制到c数组中System.arraycopy(b,0,c,a.length,b.length);//将b数组的元素复制到c数组中ArraySort.bubbleSort(c);//对c数组在进行排序returnc;}publicstaticint[]conbineSort(int[]a,int[]b)throwsFileNotFoundException{ArraySort.bubbleSort(b);ArraySort.bubbleSort(a);//先对原始的数组a,b进行排序intc[]=newint[a.length+b.length];inti=0,j=0,k=0;while(ia.length&&jb.length){if(a[i]b[j]){c[k]=a[i];i++;k++;}else{c[k]=b[j];j++;k++;}}if(ia.length){while(ia.length)c[k++]=a[i++];}else{while(jb.length)c[k++]=b[j++];}returnc;}}在测试类中进行测试packageexp7;importjava.io.IOException;publicfinalclassExp7Demo{publicstaticvoidmain(String[]args)throwsIOException{StringfileName=E:\\实验备份\\百度云同步盘\\Java\\workspace\\data.txt;StringfileNameArr=E:\\实验备份\\百度云同步盘\\Java\\workspace\\result.txt;FileWritenewflie=newFileWrite(fileName,2,100);inta[]=ReadData.readData(fileName).get(0);intb[]=ReadData.readData(fileName).get(1);intc[]=SortAndSort.conbineSort(a,b);OutArray.outArray(c);newflie=newFileWrite(c,fileNameArr);//写入文件}}方法二先合并后排序publicstaticint[]afterSort(int[]a,int[]b)throwsFileNotFoundException{intlength=a.length+b.length;intc[]=newint[length];System.arraycopy(a,0,c,0,a.length);//将a数组的元素复制到c数组中System.arraycopy(b,0,c,a.length,b.length);//将b数组的元素复制到c数组中ArraySort.bubbleSort(c);//对c数组在进行排序returnc;}4.读取第一题生成的data.txt文件中的第一行整数存放到整型数组a中。使用顺序查找算法搜索指定的数据,并输出其下标。查找类(Search):packageexp7;importjava.io.FileNotFoundException;importexp6.ArraySort;publicclassSearch{publicstaticvoidsequentialSearch(int[]a,inttar)throwsFileNotFoundException{int[]x=ArraySort.bubbleSort(a);intpoint=0;booleanflag=false;for(inti=0;ix.length;i++){//顺序查找,数组中所有能要匹配的下标if(tar==x[i]){flag=true;point=i;System.out.print(point+\t);}}if(flag==false)System.out.println(没有找到搜索目标!!!);}publicstaticvoiddichotomySearch(intarra[],inttar)throwsFileNotFoundException{int[]arr=ArraySort.selectSort(arra);intstart=0;intend=arr.length-1;intmiddle=(start+end)/2;while(start=end){if(tararr[middle])end=middle-1;elseif(tararr[middle])start=middle+1;else{System.out.println(middle);break;}}if(startend)System.out.println(沒有找到);}}5.读取第3题生成的result.txt文件中的整数存放到整型数组a中。使用折半查找算法搜索指定的数据,并输出其下标。publicstaticvoiddichotomySearch(intarra[],inttar)throwsFileNotFoundException{int[]arr=ArraySort.selectSort(arra);intstart=0;intend=arr.length-1;intmiddle=(start+end)/2;while(start=end){if(tararr[middle])end=middle-1;elseif(tararr[middle])start=middle+1;else{System.out.println(middle);break;}}if(startend)System.out.println(沒有找到);}}测试类(Exp7Demo):packageexp7;importjava.io.IOException;publicfinalclassExp7Demo{publ

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

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

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

×
保存成功