个人作业(最大子数组)
发表一篇博客文章讲述设计思想,出现的问题,可能的解决方案(多选)、源代码、结果截图、总结。
设计思路:
(1)定义整数数组arr[i]
(2)定义maxsum为最大子数组和并赋初值为arr[0]
(3)定义一个中间变量temp由arr[0]计算子数组(连续的)的和当temp为负数时更新temp为 当前arr[i]值当temp再次被赋值为正数(即temp为负值后遇到的第一个大于0的array[i])时如果该数值大于原来的maxsum则更新maxsum
(4)如果temp>0且temp>maxsum更新maxsum
(5)返回maxsum
源代码:
import java.util.Scanner;
public class GetMaxArraySum {
public static int getMax(int arr[]){//定义一个函数求数组中最大子数组和
int maxSum=arr[0];
int temp=0;//用来存储连续子数组的和
for(int i=0;i<arr.length;i++)
{
if(temp<0)
{
temp=arr[i];//当子数组的和为负数时直接抛弃并把当前数字赋给它
if(temp>0&&maxSum<temp )//当temp小于0后出现第一个大于0的temp时且大于原来的maxsum赋值
{
maxSum=temp;}//一开始没写该语句当输入1,-2,4的时候输出1出现逻辑错误
}
}
else
{
temp+=arr[i];//如果连续数字和为正则继续加下去
if(maxSum<temp)
{
maxSum=temp;//当现有连续数字和大于之前最大连续数字和时更新最大值
}
}
}
return maxSum;
}
public static void main(String[] args){
int []array=new int[5];
System.out.println("请输入要求解的数组个数:");
Scanner reader=new Scanner(System.in);
int n=reader.nextInt();
System.out.println("请输入要求解的数组5:");
for(int i=0;i<n;i++)
{
array[i]=reader.nextInt();
}
int result=getMax(array);
System.out.println("最大子数组和为:"+result);
}
结果截图:
总结(遇到的问题):
(1)一开始写完程序运行时系统提示没有main函数
解决:重建了一个项目,大概是一开始建错项目了
(2)当输入1,-2, 3时返回1
解决:逻辑错误,忘记考虑当temp更新为3时且大于原来的1时应该传递给maxsum