个人作业数组续
新问题:
要求数组从文件读取。 如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。 另外, 如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩溃。
设计思想:
这个问题和之前那个大体一样,就是加了一个文件输入和非法输入的处理。查了一下之前学过的文件输入,用空格区分每一个数字,这样就把他们存到数组里了。对于文件内容非法和内存溢出问题,用到上学期学的异常监测,之后就和上一个问题一样了。
源代码:
package wenjian;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class zong {
public static void main(String arg[]) {
try {
String encoding = "UTF-8"; //可解决中文乱码问题
File file = new File("F:/shujv.txt");
if (file.isFile() && file.exists()) {
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), encoding);
BufferedReader bufferedReader = new BufferedReader(read);
String lineTXT = null;
String allNumString = "";
int max=0;
int[] array = null;
while ((lineTXT = bufferedReader.readLine()) != null) {
System.out.println(lineTXT.toString().trim()); // 读出的每一行
allNumString += lineTXT+" "; //通过空格分隔数字
}
if(allNumString != null && !"".equals(allNumString)){
String[] numbers = allNumString.split(" ");
array = new int[numbers.length];
for (int i = 0; i < numbers.length; i++) {//循环赋值
array[i] = Integer.parseInt(numbers[i]);
}
}
for (int i = 0; i < array.length; i++) {
System.out.println("数组["+i+"]:"+array[i]);
}
for(int b=0;b<array.length;b++)//最外层循环控制这个子数组的头
{
for(int c=b;c<=array.length;c++)//中层循环控制这个子数组的尾
{
int sum=0;
for(int d=b;d<c;d++) //内层循环从头加到尾
{
sum=sum+array[d];
if(max<=sum)//通过比较把最大的子数组和赋给max
{
max=sum;
}
}
}
}
System.out.print("子数组和的最大值为:"+max);
read.close();
} else {
System.out.println("找不到指定的文件!");
}
} catch (Exception e) {
System.out.println("读取文件内容操作出错");
e.printStackTrace();
}
}
}
运行截图:


总结:对于大数据和大数的处理应该还有更好的解决办法,简单的用到一个异常处理感觉是不够的,要再深入学习一下。
浙公网安备 33010602011771号