您的位置:首页 > 其它

软件工程个人作业04

2016-04-08 17:20 323 查看
设计思想

用户设定数组长度及其数值,定义sum的初值为0,max初值为数组第一个数,所求子数组的初始位置为0,进行一次遍历,sum依次与数组的数叠加,若和为正数,则证明目前的子数组之和为最大。若和为负数,则记此位置为startIndex,即记录下一个位置的数,当sum大于max时,给max赋值,记此位置为endIndex,如此进行一次循环即可。

出现的问题

用户输入数组数值可能会越界

可能的解决方案(多选)

判断用户输入数的个数,错误时重新输入。

源代码

import java.util.Scanner;
public class Submax {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
System.out.println("please input the number of the array date");
int a=in.nextInt();
int []date=new int[a];
System.out.println("input the number (Int):");
for(int i=0;i<a;i++)         //用户输入数字
{
date[i]=in.nextInt();
}
int sum=0,max=date[0];
int startIndex=0,endIndex=0;
for(int i=0;i<a;i++)        //进行一次遍历
{
if(sum>=0)
{
sum+=date[i];         //和为正数时一直相加
}
else
{
sum=date[i];
startIndex=i;         //和为负数时记录下一个数
}
if(sum>max)
{
max=sum;
endIndex=i;            //求最大值
}
}
System.out.println("the max subarray is:");
for(int i=startIndex;i<=endIndex;i++)
{
System.out.println(date[i]+"  ");//输出子数组
}
System.out.println("the max is:"+max);
}

}


结果截图





总结

许多看起来很难的程序也会有简单的解决之道,需勤动手动脑。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: