定义一个数组返回最大子数组的值(2)

第二次项目添加了文件的输入、大数据的读取以及数据的控制,比第一次的操作更复杂了;

文件的读入,读取是固定的代码,这里就不多说了,然后是数据的判断(是否为整数)数据读出时我采用字符形式读取,然后以空格为分界线,将不同的数据存入数组中,再转换为整数,转换的时候采用try()判断是否为整数,不是整数则跳出程序,是整数则继续运行;

当数据过大时会有延时(存在崩盘的可能),所以目前只读取有限数据100000;

然后利用读出的数组进行计算最大子数组;

以下是程序原代码:

package 数组;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Random;
import java.util.Scanner;
import javax.sound.sampled.Line;
public class main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  final  int N=100000;//可读取的数据量N
  main c=new main();
int[] A=new int[N];
String[] B=new String[1];
String C=new String();
String[] D=new String[10];
Scanner in=new Scanner(System.in);
A=c.randomCommon(0,294967295,N);
//c.write(A,N);
//
 int q;
// 
// B=c.read();
// C=B[0];
// D=C.split(" ");
// for(int n=0;n<N;n++)
// {
//  try {
//   A[n]= Integer.parseInt(D[n]);
//  } catch (NumberFormatException e) {
//   System.out.println("输入的第"+(n+1)+"个不是整数(或范围过大):"+D[n]);
//     // e.printStackTrace();
//      System.exit(0);
//  }
//  
// }
// System.out.println(A[6]);
 
 q=c.max(A,N);
 System.out.println(q);
 }
/**
 * @param A
 * @param n
 * @return
 */
public int max(int[] A,int n)
{
 int end=A[0];
 int sum=0;
 for(int i=0;i<n;i++)
 {sum=A[i];
  //end=A[i];//存储子数组中的最大值
  for(int j=i;j<n;j++)
  {
   sum+=A[j];
   if(sum>end)
    end=sum;
   
   
  }
  
 }
 return end;
}
public String[] read()//读出文件
{
  String[] w=new String[10];
 Scanner sc = null;
 try {
  sc = new Scanner(new FileReader("D:\\shuzu.txt"));
 } catch (FileNotFoundException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 String line=null;
 while((sc.hasNextLine()&&(line=sc.nextLine())!=null))
 { }
 w[0]=line;
 return w;
}
/**
 * 随机指定范围内N个不重复的数
 * 最简单最基本的方法
 * @param min 指定范围最小值
 * @param max 指定范围最大值
 * @param n 随机数个数
 */   
public int[] randomCommon(int min, int max, int n){ 
    if (n > (max - min + 1) || max < min) { 
           return null; 
       } 
    int[] result = new int[n]; 
    int count = 0; 
    while(count < n) { 
        int num = (int) (Math.random() * (max - min)) + min; 
        boolean flag = true; 
        for (int j = 0; j < n; j++) { 
            if(num == result[j]){ 
                flag = false; 
                break; 
            } 
        } 
        if(flag){ 
            result[count] = num; 
            count++; 
        } 
    } 
    return result; 

public void write(int[] A,int a)//写入文件
{
 File file = new File("D:\\shuzu.txt");
    try {
         FileWriter writer = new FileWriter(file, true);
         for(int i=0;i<a;i++)
         {writer.write(A[i]+" ");}
       
         writer.write("\r\n");
         writer.close();
    } catch (Exception ex) {
         ex.printStackTrace();
         ex.getMessage();
    }
}
}

猜你喜欢

转载自www.cnblogs.com/zql98/p/10539920.html