返回一个整数环形数组中最大子数组的和及第六周学习进度
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("\n");
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("\n");
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 |
|
|
|
浙公网安备 33010602011771号