1、设计思想:
1)定义一个整数,用来表示数组中元素的个数;
2)定义数组a,并利用随机数的方法来产生对应的元素;
3)在定义一个数组b,其中数组b中元素是数组啊中元素重复的两倍;
4)利用对应的算法,计算数组b中子数组的最大值,即为环形数组中子数组的最大值。
2、出现的问题:
计算环形数组的算法存在问题,对于有些数组就可以正确算出子数组的最大值,而有些随机产生的数组择不能算出,出现了数组下标溢出的错误。
截图:
3、可能的解决方案:无
4、源代码:
package demo; import java.util.Scanner; public class gailun { public static void main(String args[]){ int num; Scanner in=new Scanner(System.in); System.out.println("请输入数组中元素的个数:"); num=in.nextInt(); int []a=new int[num]; //定义数组a for(int i=0;i<num;i++){ a[i]=(int)(Math.random()*20-10); //产生的随机数范围在-9~9 } System.out.println("产生的数组元素的值为:"); //输出数组a中的元素 for(int i=0;i<num;i++){ System.out.print(a[i]+" "); } System.out.print(" "); int []b=new int[a.length*2]; //定义一个数组b,b的长度为a的两倍,且b中的元素为a中元素重复两次 System.out.println("生成的环形数组为:"); for(int i=0;i<b.length;i++){ b[i]=a[i%a.length]; System.out.print(b[i]+" "); } System.out.print(" "); int sum=b[0],s_temp=b[0];//将数组最大值初始为b数组中第一个元素 int s=0; int i=1; while(i<b.length/2+s) { s_temp=s_temp+b[i]; if(s_temp<b[i]) { s_temp=b[i]; s=i; } if(s_temp>sum) { sum=s_temp; } i++; } System.out.println("最大的子数组为:"+sum); } }
5、结果截图:
6、总结
在这次寻找环形数组中子数组的最大值实验中,体现了两人合作以及编程之前相应思路的重要性,在实际动手编写程序的时候,我们要先有相应的思路来大致解决对应的任务,对于代码的结构有初步的了解,设想一下对应的算法结构以及可能会出现的问题,接下来就要实际去操作,对于出现的不同的问题,我们再去想方法去解决。其次便是团队合作的重要,在讨论的过程中,两个人相互讲述自己的思想,对于同一个问题有着不同的见解,同时也展现了不同的思路。虽然程序并不和很难,但细节的地方还是有待完善。
第七周学习进度条 |
|||||
日期 |
起始时间 |
净时间 |
活动 |
了解到的知识点 |
代码量 |
周一 |
18:00-22:00 |
4hours |
上网查询资料,书写博客,数组代码 |
二维最大子数组的设计思路和实现方式 |
300 |
周二 |
20:00-23:00 |
3hours |
登录、注册界面 |
登录界面的servlet版 |
350 |
周三 |
14:30-18:30 |
4hours |
Web大作业,上网查询资料 |
Javabean使用的方法 |
250 |
周四 |
19:00-21:30 |
2.5hours |
上网查询资料 |
数据库与代码之间的连接 |
200 |
周五 |
20:00-10:00 |
2hours |
博客的书写 |
Servlet的使用 |
200 |
周末 |
8.5hours |
代码书写 |
二位最大子数组的实现 |
260 |
|
合计 |
24hours |