4月11日课堂练习

一、程序设计思想

在上一次的基础上,因为是首尾相连,所以将数组长度扩大为原数组长度的两倍即l*2,在原来进行找最大子数组的代码中往外套进一个循环,将数组前l的每一个数都作为依次计算最大子数组和的首位置。

二、合作过程

因为在原有基础上,只是加了一个循环,所以并未出现太多的讨论及冲突。

三、体会

就前几次结对开发来说,在编程中,两个人一起讨论,会让思路更加清晰,使自己少走弯路,两个人不同的优势也能使代码更加简便,不会过于繁杂,并且讨论也可以引发很多其他问题,是自己在知识储备上更进一步。

四、本次作业代码

 1 //信1405-1班20142973魏垚
 2 //最大子数组的和2:数组首尾相接
 3 
 4 import java.util.Scanner;
 5 public class Max_Array_02 {
 6 
 7     public static void main(String[] args) {
 8         // TODO Auto-generated method stub
 9         
10         Scanner in=new Scanner(System.in);
11         
12         System.out.print("请输入数组长度:");
13         int l=in.nextInt();//用户输入数组长度
14         
15         int arr[]=new int[l*2];//定义数组
16         int arr1[]=new int[l*2];//储存子数组和
17         
18         System.out.print("请依次输入数组中各元素:");
19         for(int i=0;i<l;i++)
20         {
21             arr[i]=in.nextInt();//用户输入数组各个值
22         }
23         for(int j=l;j<l*2;j++)
24         {
25             arr[j]=arr[j-l];//
26         }
27         
28         //找出最大子数组
29         int max=arr[0];
30         for(int j=0;j<l;j++)
31         {
32             arr1[j]=arr[j];
33             max=Math.max(max,arr[j]);
34             for(int i=j+1;i<l+j;i++)
35             {
36                 if(arr1[i-1]>=0)//当前i个元素之和大于0就接着往后加
37                     arr1[i]=arr[i]+arr1[i-1];
38                 if(arr1[i-1]<0)//当前i个元素之和小于0就不加,直接把下一个元素的值直接取下来
39                     arr1[i]=arr[i];    
40                 
41                 //找到最大值
42                 max=Math.max(max,arr1[i]);
43             }
44         }
45         System.out.print(max);//打印最大值
46         
47         in.close();
48     }
49 }

五、截图

原文地址:https://www.cnblogs.com/weiyao/p/5395996.html