返回一个整数环形数组中最大子数组的和及第六周学习进度

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

 
原文地址:https://www.cnblogs.com/th1314/p/6636539.html