Java-数组实验.pdf
实验七数组一实验目的1掌握数组相关常用算法2掌握方法的定义和调用二实验内容1.使用程序生成两行随机整数,整数之间用逗号分隔,并写入文本文件data.txt 中。Math.random()返回 0-1 之间的随机数,通过乘以 n 并取整可得到0n-1 之间的随机数。打开文件、关闭文件和写入文件的代码如下:BufferedWriter bw=new BufferedWriter(new FileWriter(data.txt);/打开文件bw.write(new Integer(x);/输出数据到文件bw.close();/关闭文件另外,bw.newLine()可在文件中输出换行符。写入数据类:package exp7(FileWrite);import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;public class FileWrite public FileWrite(String fileName,int n,int size)throws IOException /n 为需要写入的几行数,size 为一行有多少个数字BufferedWriter bw=new BufferedWriter(new FileWriter(fileName);/创建字符流for(int j=1;j=n;j+)for(int i=1;i=size;i+)int random=(int)(100*Math.random();/产生 0-100 之间的随机数String st=random+;/将整型转化为字符型数据bw.write(st);/写入文件if(i=size-1)bw.write(t);/在每个数据后面写入制表位 bw.newLine();/另起一行 bw.close();/关闭文件输出流 public FileWrite(int tar,String fileName)throws IOException BufferedWriter bw=new BufferedWriter(new FileWriter(fileName);for(int i=0;i tar.length;i+)String st=tari+;bw.write(st);if(itar.length-1)bw.write(t);bw.close();System.out.println(文件写入成功!);读出数据类(ReadData)package exp7;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import java.util.Scanner;public class ReadData public static ArrayList readData(String fileName)throws IOException /创建 ArrayList 集合用于返回数组对象Scanner sc=new Scanner(new BufferedReader(new FileReader(fileName);/读入制定路径的文件ArrayList al=new ArrayList();/创建 ArrayList 集合while(sc.hasNextLine()/循环读出每行数据,并将每行数据装入数组中,再将数据装入集合中String st=sc.nextLine();/一次性读取整行数据String strArr=st.split(t);/根据制表位分割数组int lengths=strArr.length;/定义数组的长度int strToInt=new intlengths;/创建用于存储数字的整形数组for(int i=0;i strArr.length;i+)strToInti=Integer.parseInt(strArri);/将字符型数据转化为整型数据 al.add(strToInt);/将两个数组存入集合中 int a=al.get(0);return al;/返回集合对象 2 读 取 第 一 题 生 成 的data.txt文 件 中 的 第 一 行 整 数 存 放 到 整 型 数 组a 中。已 知System.currentMillis()方法可返回从1970 年 1 月 1 日到系统当前时间所经过的毫秒数。通过在算法代码执行前后分别调用该方法并求其差值,可定量测量代码的执行时间。使用实验六第三题的三种排序算法分别对数组a 进行排序,输出排序代码执行耗费的时间,并分析。为了得到测量数据,整数的数量应该足够大。表格中第一行为参与排序的数据个数,需要填写排序耗费的时间。100 1000 10000 冒泡排序12 57 545 选择排序8 52 281 快速排序10 55 109 3读取第一题生成的data.txt 文件中的整数分别存放到两个整型数组a 和 b 中。分别对a和 b 进行排序,然后将 a 和 b 中的数据合并到新数组c 中并保持数据有序。最后将排序后的数据写入到结果文件result.txt 中。方法一在合并的过程中排序合并类(SortAndSort):package exp7;import exp6.ArraySort;import java.io.FileNotFoundException;import java.io.IOException;public class SortAndSort public static int afterSort(int a,int b)throws FileNotFoundException int length=a.length+b.length;int c=new intlength;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 数组在进行排序return c;public static int conbineSort(int a,int b)throws FileNotFoundException ArraySort.bubbleSort(b);ArraySort.bubbleSort(a);/先对原始的数组a,b 进行排序int c=new inta.length+b.length;int i=0,j=0,k=0;while(i a.length&j b.length)if(ai bj)ck=ai;i+;k+;else ck=bj;j+;k+;if(i a.length)while(i a.length)ck+=ai+;else while(j b.length)ck+=bj+;return c;在测试类中进行测试package exp7;import java.io.IOException;public final class Exp7Demo public static void main(String args)throws IOException 实验备份百度云同步盘Javaworkspacedata.txt;实验备份百度云同步盘Javaworkspaceresult.txt;FileWrite newflie=new FileWrite(fileName,2,100);int a=ReadData.readData(fileName).get(0);int b=ReadData.readData(fileName).get(1);int c=SortAndSort.conbineSort(a,b);OutArray.outArray(c);newflie=new FileWrite(c,fileNameArr);/写入文件 方法二先合并后排序public static int afterSort(int a,int b)throws FileNotFoundException int length=a.length+b.length;int c=new intlength;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 数组在进行排序return c;4读取第一题生成的data.txt 文件中的第一行整数存放到整型数组a 中。使用顺序查找算法搜索指定的数据,并输出其下标。查找类(Search):package exp7;import java.io.FileNotFoundException;import exp6.ArraySort;public class Search public static void sequentialSearch(int a,int tar)throws FileNotFoundException int x=ArraySort.bubbleSort(a);int point=0;boolean flag=false;for(int i=0;i x.length;i+)/顺序查找,数组中所有能要匹配的下标if(tar=xi)flag=true;point=i;System.out.print(point+t);if(flag=false)System.out.println(没有找到搜索目标!);public static void dichotomySearch(int arra,int tar)throws FileNotFoundException int arr=ArraySort.selectSort(arra);int start=0;int end=arr.length-1;int middle=(start+end)/2;while(start=end)if(tar arrmiddle)start=middle+1;else System.out.println(middle);break;if(startend)System.out.println(沒有找到);5读取第 3 题生成的 result.txt 文件中的整数存放到整型数组a 中。使用折半查找算法搜索指定的数据,并输出其下标。public static void dichotomySearch(int arra,int tar)throws FileNotFoundException int arr=ArraySort.selectSort(arra);int start=0;int end=arr.length-1;int middle=(start+end)/2;while(start=end)if(tar arrmiddle)start=middle+1;else System.out.println(middle);break;if(startend)System.out.println(沒有找到);测试类(Exp7Demo):package exp7;import java.io.IOException;public final class Exp7Demo public static void main(String args)throws IOException 实验备份百度云同步盘Javaworkspacedata.txt;实验备份百度云同步盘Javaworkspaceresult.txt;FileWrite newflie=new FileWrite(fileName,2,100);int a=ReadData.readData(fileName).get(0);int b=ReadData.readData(fileName).get(1);int c=SortAndSort.conbineSort(a,b);OutArray.outArray(c);newflie=new FileWrite(c,fileNameArr);Search.sequentialSearch(c,5);Search.dichotomySearch(c,5);6使用数组实现进制转换。从键盘输入一个十进制数,将其转换成二进制、八进制以及十六进制数并输出。package exp7;import java.util.Scanner;public class SystemSwitch public static void transfort(int tar,int n)/输入要转化的数和要转换的进制char x=new char1000;int i=0;/记录一个转化了多少次while(tar!=0)int m=tar%n;if(m=0;i-)/讲数组倒者输入System.out.print(xi);public static void main(String args)Scanner sc=new Scanner(System.in);int tar=sc.nextInt();int n=sc.nextInt();SystemSwitch.transfort(tar,n);tar=sc.nextInt();n=sc.nextInt();SystemSwitch.transfort(tar,n);【实验小结】实验准备和过程实验结果实验报告总分