作业1链接:https://www.cnblogs.com/wxy2000/p/10506716.html
要求:
- 数组从文件读取
- 输入很大的数组,和很多大的数字保持你的程序正常输出
- 若输入文件的参数有错误,程序能正常退出,并显示相应的错误。任何错误都不能使程序崩溃
设计思路:
- 利用random随机生成很大的数组
- 用out.write将数组写入到txt文件中
- 采用biginteger解决int型数据的大小受到限制的问题
- 求最大子数组和的方法同作业1
遇到的问题:
- 不了解biginteger的使用,后来经过同学的知道解决了
- 输入某些异常时没用提示,正在完善
源代码:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Q_31 {
static Scanner sc=new Scanner(System.in);
static float d=Float.NEGATIVE_INFINITY;
public static void main(String[] args) throws IOException {
//输入数组长度
int n1=0;
System.out.println("请输入数组的长度");
n1=sc.nextInt();
//随机生成数组
int[] a=new int [n1];
//System.out.println("请输入"+n1+"个 整数");
for(int i=0;i<n1;i++){
a[i] =(int) (Math.random()*1000)-500;
System.out.println(a[i]);
}
//调用函数输出结果
int maxSum = getMaxSum(a);
System.out.println("最大子数组的和为:" + maxSum);
File file = new File("d:\\array.txt"); //存放数组数据的文件
FileWriter out = new FileWriter(file); //文件写入流
//将数组中的数据写入到文件中
for(int i=0;i<a.length;i++){
out.write(a[i]+"\t");
//out.write("\r\n");
}
out.write("最大子数组的和为:" + maxSum);
out.close();
}
private static int getMaxSum(int[] a) {
int n = a.length;
int max1 =(int) d;//令最大值等于无穷小
for (int i = 0; i < n; i++) {
int sum = 0;
for (int j = i; j < n; j++) {
sum += a[j];
if (max1 < sum) {
max1 = sum;
}
}
}
return max1;
}
}
运行结果: