第二次项目添加了文件的输入、大数据的读取以及数据的控制,比第一次的操作更复杂了;
文件的读入,读取是固定的代码,这里就不多说了,然后是数据的判断(是否为整数)数据读出时我采用字符形式读取,然后以空格为分界线,将不同的数据存入数组中,再转换为整数,转换的时候采用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 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(" ");
writer.close();
} catch (Exception ex) {
ex.printStackTrace();
ex.getMessage();
}
}
}
/**
* 随机指定范围内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(" ");
writer.close();
} catch (Exception ex) {
ex.printStackTrace();
ex.getMessage();
}
}
}