1.设计思路:想要从文件中读取数据,首先要建一个文件用来进行文件的读写,接着要通过for循环将读取出来的数值存储到数组中,我用的是ArrayList()定义的数组,完成文件中数据存储后,它的类型是String类型,此时就需要将此数组转换成为int类型的数组。然后和求子数组的最大和连接就行。
2.源程序代码:
package shuzu; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class ArrayMax { public static void main(String[] args){ //写 File a=new File("d:/text1.txt"); BufferedWriter writer=null; try { writer=new BufferedWriter(new FileWriter(a)); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } Scanner sc=new Scanner(System.in); System.out.println("请输入数组中数字个数的大小"); long aa=sc.nextLong(); for(long i=0;i<aa;i++) { long l=(long)(100-(Math.random()*10000)*(Math.random()>0.5?1:-1));//随机数 String s=""+l; //把l变为string类型 如果大于0.5取1小于0.5取-1 try { writer.write(s); } catch (Exception e) { // TODO: handle exception } try { writer.newLine();//换行 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } try { writer.close();//写文件后关闭 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //读 BufferedReader br = null; try { br=new BufferedReader(new FileReader(a)); } catch (FileNotFoundException e) { e.printStackTrace(); } String line; //需要转换为int ArrayList<String> d=new ArrayList<String>(); // ArrayList d=new ArrayList(); try { while((line=br.readLine())!=null ) { //System.out.println(line); d.add(line); } int i=d.size(); //System.out.println("i:"+i); br.close(); writer.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } int tt[]=new int[d.size()]; for(int i=0;i<d.size();i++) { int s=Integer.parseInt(d.get(i)); tt[i]=s; System.out.println("tt="+tt[i]); } int maxsum,maxstart; // Scanner in = new Scanner(System.in); // System.out.println("请输入数组的大小:"); // number=in.nextInt(); // int [] array=new int[number]; // System.out.println("请输入数组的值:"); // for(i=0;i<number;i++) // { // array[i]=in.nextInt(); // } maxsum=tt[0]; maxstart=tt[0]; for(int i=1;i<d.size();i++) { if(maxstart<0) { maxstart=0; } maxstart+=tt[i]; if(maxstart>maxsum) maxsum=maxstart; } System.out.println("子数组的最大和为:"); System.out.println(maxsum); } }
3.结果截图:
4.个人反思:做此实验我从中学到了很多教训,首先就是文件的读写,通过将不同方法和类组合在一起可以写出一个功能强大的程序,但前提是需要了解各种函数的作用和使用方法。然后才能下手去做,接着就是各种类型之间的转换,例如String类型和int类型之间的转换就需要Integer.parseInt()函数,以后我会再接再厉,争取学好这门课程。