返回整数数组最大子数组和改进

今天本来想完成第三阶段,就是求2维数组最大子数组的和,但是我在测试原来程序的时候发现了问题,就是如果我输入-1,2,4,8  就是第一个数为负数的时候,最大子数组和仍然算进去第一个负数,这显然是不对的,于是我就对源程序改了一下,还加入如果都是负数的结果,以及前面n-1个负数,最后一个正数的结果,当然也对第一个是负数的问题进行了修改。

源代码:

主函数:

public static void main(String[] args )
{
Scanner in=new Scanner(System.in);
int hang;
int lie;
int length;
int yichu=0;
//输入需要的数据
System.out.print("请输入数组的行数");
hang=in.nextInt();
System.out.print("请输入数组的列数");
lie=in.nextInt();
length=hang*lie;
int []number=new int[length];
//判断是否溢出,并标记
for(int i=0;i<length;i++)
{
number[i]=in.nextInt();
if(number[i]>Integer.MAX_VALUE||number[i]<Integer.MIN_VALUE)
{
yichu=1;
break;
}
}
//调用函数,将数据存入到txt文件中
if(yichu==0)
{
int[] add=new int[length];
int count=0;
int fushu=0;
//判断是否输入都为负数
while(number[count]<0&&count<length) {
add[count]=0;
if(count==length-1)
{
fushu=1;
break;
}
else
{
count++;
}
}


//如果为负数,执行的函数
if(fushu==1&&count==length-1)
{
System.out.print("输入的全部为负数");
int max=number[0];
for(int i=1;i<length;i++)
{
if(number[i]>max)
{
max=number[i];
}
System.out.print(max);
}
cunChu(hang,lie,number,max);
}



//输入的不全是负数,执行的函数
else
{
//判断第一个是否为负数
if(number[0]>0)
{
add[0]=number[0];
count++;
}
//因为前面判断前count为负数,所以这就是直接从count遍历,求最大子数组,因为前count都为负数,就没有加的必要
for(;count<length;count++)
{
if(add[count-1]+number[count]<0)
{
add[count]=0;
}
else
{
add[count]=number[count]+add[count-1];
}
}
int max=add[0];
//循环遍历,求出max最大值
for(int i=0;i<length-1;i++)
{
if(add[i+1]>max)
{
max=add[i+1];
}
}
cunChu(hang,lie,number,max);
}
}
else
{
System.out.print("输入数字溢出");
}
}

写入文件的函数:

public static void cunChu(int hang,int lie,int num[],int max) {
try
{
File file=new File("F:\\大二下java\\input.txt");
if(!file.exists())
{
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file,false);
OutputStreamWriter osw = new OutputStreamWriter(fos);
BufferedWriter bw = new BufferedWriter(osw);
int length=num.length;
String shuzi[]=new String[length];
String stringHang=String.valueOf(hang+"\r\n");
String stringLie=String.valueOf(lie+"\r\n");
String stringmax=String.valueOf("\r\n"+"最大值"+max);
for(int i=0;i<length;i++)
{
shuzi[i]=String.valueOf(num[i]);
}
bw.write(stringHang);
bw.write(stringLie);
for(int i=0;i<length;i++)
{
bw.write(shuzi[i]+",");
}
bw.write(stringmax);
bw.newLine();
bw.flush();
bw.close();
osw.close();
fos.close();
}
catch (FileNotFoundException e1)
{
e1.printStackTrace();
} catch (IOException e2)
{
e2.printStackTrace();
}
}

posted @ 2022-03-19 21:00  听风1234  阅读(26)  评论(0编辑  收藏  举报