设计思想: 遍历所有子数组,将每个元素依次相加,将每次加后赋给一个值b,加下一个元素后,与之前最大值比较,若小于,则最大值不变,否则更新最大值。刚加到和小于等于0时,b更新为数组下一位元素。
出现的问题: 开始时b更新的条件判断错误,导致输出错误。
源代码:
import java.util.Scanner;
public class Arraymax {
public static int maxSum(int arr[]){ //定义一个函数maxSum 求数组中子数组和的最大值
int sum = arr[0]; //sum 子数组和
int b = 0;
for(int i = 0;i<arr.length;i++)
{
if(b<=0) //子数组和小于0时,b为子数组为0时的元素的后一位
b=arr[i];
else
b+=arr[i]; //b 子数组和
if(b>sum)sum=b; //将最大子数组和赋值给sum
}
return sum;
}
public static void main(String[] args) {
System.out.println("请输入数组中元素个数;");
Scanner reader=new Scanner(System.in);
int n=reader.nextInt();
int []array=new int[n];
System.out.println("请输入数组:");
for(int i=0;i<n;i++) //输入数组
{
array[i]=reader.nextInt();
}
int result = maxSum(array); //调用函数
System.out.println("最大字数组之和为:"+result);
}
}
结果截图:
总结:
编写程序前一定要先想好程序的逻辑结构。