对上周的一维数组加以完善。
代码如下
package lainxu; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.math.BigInteger; import java.util.List; //import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ShowM { //static Scanner it=new Scanner(System.in); static List<BigInteger> nums=new ArrayList<BigInteger>(); //用于储存数组 public static void main(String[] args) throws IOException { // TODO 自动生成的方法存根 List<BigInteger> max=new ArrayList<BigInteger>(); int maxp=-1; //储存从1开始的子组和最大值的位置 daochu(); if(!daoru()) { System.out.print("数据导入失败"); return; } else System.out.print("数据导入成功"); //int num=0; //手动输入区域 //-------------------------------------------- // System.out.println("请输入你想要查找数组的长度:"); // while(num<=0) //实现用户输入数组的大小 // { // if(it.hasNextInt()) // { // num=it.nextInt(); // if(num<=0) // { // System.out.println("输入数组不能小于等于0,请重新输入"); // } // // } // else // { // it.next(); // System.out.println("输入格式错误,请重新输入"); // } // } //-------------------------------------------- max.add(new BigInteger("0")); //添加一个max使其为0 for(int i=1;i<=nums.size();i++) //储存数组 { //-------------------------------------------- //手动输入区域 //System.out.println("请输入第"+i+"个数:"); BigInteger g_down=null; // while(g_down==null) // { // if(it.hasNextInt()) // { g_down=nums.get(i-1); max.add(g_down.add(max.get(i-1))); //nums.add(g_down); // } // else // { // it.next(); // System.out.println("输入格式错误,请重新输入"); // } // } //-------------------------------------------- } System.out.println("输入的数组是"+nums.toString()); BigInteger minn=max.get(0); int minp=0; BigInteger remax=max.get(1); maxp=0; for(int i=1;i<max.size();i++) { List<BigInteger> max2=max.subList(0, i); BigInteger g_min=min(max2); if(max.get(i).subtract(g_min).compareTo(remax)==1) { remax=max.get(i).subtract(g_min); maxp=i-1; minp=max.indexOf(g_min); } } System.out.println("最大子数组和为是"+(remax.subtract(minn))+",位置为("+(minp+1)+","+(maxp+1)+")"); //it.close(); } public static void daochu() throws IOException { File a=new File("suzu.txt"); FileOutputStream b = new FileOutputStream(a); OutputStreamWriter c=new OutputStreamWriter(b,"UTF-8"); for(int i=0;i<10000;i++) { int g_down=(int) (Math.random()*2000000000); if((int) (Math.random()*2)==0) { g_down=-g_down; } if(i==0) c.append(g_down+""); else c.append(" "+g_down); } c.close(); b.close(); }