课堂练习求环整数组中最大子数组之和
2016-04-12 17:52
295 查看
设计思路: 之前还有一个课堂练习,是用户输入一个整数组,求其中最大子数组之和,我借鉴的其他同学的代码,仅在此基础上修改的。 运用try,catch使得用户不必在输入数组之前输入数组的长度,但是需要一个除整数以外的数来结尾。一共使用了3个循环,运用一个循环得出每个数组中最大子数组之和的最大值,一个是用来 计算最大子数组之和,最后一个用来实现数组的前移。第一个循环中包着另外两个循环。 总的来说,是在之前课堂练习的基础上增加了将一个数组中的每个数做一次最前面的数,从中求出最大值。 程序代码: 1 import java.util.InputMismatchException; import java.util.Scanner; public class Maxshuzu { public static void main(String args[]) { int jishuqi=0; //定义一个最大值 int MAX=0; //定义一个数组shuzu[100],之中100可修改 int shuzu[]=new int[100]; Scanner in=new Scanner(System.in); System.out.print("请输入一组数,以一个非整数结尾:"); //输入,以除整数外的任何东西结尾 while(true) { //验证输入是否合法,以此为循环条件的结束 try { shuzu[jishuqi]=in.nextInt(); } catch(InputMismatchException e) { break; } jishuqi++; } //此循环是为了得出每个数组中最大子数组之和的最大值 for(int m=0;m<jishuqi;m++) { int maxsum=0,sum=0; //计算最大子数组之和 for(int i=0;i<jishuqi;i++) { if(sum<0) { sum=0; } sum+=shuzu[i]; if(sum>maxsum) { maxsum=sum; } } //实现数组的前移 int a=shuzu[0]; for(int n=0;n<jishuqi-1;n++) { shuzu =shuzu[n+1]; } shuzu[jishuqi-1]=a; if(maxsum>MAX) { MAX=maxsum; } } //输出结果 System.out.println("子数组的最大值为:"+MAX); } } 结果截图:
程序总结
程序改完之后,结果不对,不能快速发现问题所在,究其原因,原来是没有将个模块做单元测试。代码上的原因是定义最大值时将其定义在循环之外了。
相关文章推荐
- TCP/IP(六)UDP
- 外部Activity和fragment之间的切换,传值
- SAS programming tricks
- Javascript模板引擎原理,几行代码的事儿
- 【bash】编程基础之常用变量,符号
- Runtime
- c++第三次作业
- css书写规则总结
- corethink功能模块探索开发(十七)opencmf.php 配置文件
- Session的生命周期
- linux 特殊的文件描述符
- cobbler 全自动安装
- windows 下 OpenResty 的使用
- F5负载均衡及会话保持学习笔记一
- 彻底学会使用epoll(二)——ET和LT的触发方式
- 错误:Too many arguments to function call,expected 0,have *
- MySQL基础四:表的删除、插入、更新、查找
- redis.conf配置解析
- oracle数据的导入与导出
- 【js】KindEditor + struts2使用详解(上传文件,支持多图上传)