软件工程个人作业04
2016-04-08 17:20
323 查看
设计思想
用户设定数组长度及其数值,定义sum的初值为0,max初值为数组第一个数,所求子数组的初始位置为0,进行一次遍历,sum依次与数组的数叠加,若和为正数,则证明目前的子数组之和为最大。若和为负数,则记此位置为startIndex,即记录下一个位置的数,当sum大于max时,给max赋值,记此位置为endIndex,如此进行一次循环即可。
出现的问题
用户输入数组数值可能会越界
可能的解决方案(多选)
判断用户输入数的个数,错误时重新输入。
源代码
结果截图
总结
许多看起来很难的程序也会有简单的解决之道,需勤动手动脑。
用户设定数组长度及其数值,定义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); } }
结果截图
总结
许多看起来很难的程序也会有简单的解决之道,需勤动手动脑。
相关文章推荐
- Android Studio SDK源更换
- Reverse Linked List
- 访问dubbo的rest服务返回404
- Nutch爬虫引擎使用分析
- Spark的join与cogroup简单示例
- 强制杀死tomcat
- 数据持久化之NSKeyedArchiver
- kettle imestamp : Unable to get timestamp from resultset at index 22
- 0408给“抓抓抓抓抓慧”的时空汉堡
- CentOs7 修改rpm安装背景图
- AnyDesk远程工具导致的Network link is disconnected
- C# 实验五--平面直角坐标系
- Java程序员笔试经典例题
- leetcode 67. Add Binary
- ActiveMq 学习总结
- 平衡二叉树构建过程中的旋转
- 设计模式之---责任链模式
- ORA-01466: unable to read data - table definition has changed
- 面向对象编程(OOP)
- 通用元素跟随鼠标移动效果