数组求和(2)

(1)代码:

  1 import java.util.Random;
  2 
  3 
  4 public class max {
  5 
  6     public static void main(String[] args) {
  7         // TODO Auto-generated method stub
  8         int n=1000;
  9         int C[]=new int[n];
 10         int D[]=new int[n];
 11         int a=0;
 12         int MAX=0;
 13         int b=0;
 14         long MAX1=0;
 15         long b1=0;
 16         double MAX2=0;
 17         double b2=0;
 18         int MAX3=0;
 19         int b3=0;
 20         int m1=2147483600;
 21         int m2=2147483647;
 22         Random rand=new Random();
 23         //随机产生数组C[N]
 24         for(int i=0;i<n;i++)
 25         {
 26             a=rand.nextInt(2);
 27             if(a==0)
 28             {
 29                C[i]=(int) (m1+Math.random()*( m2-m1+1));
 30             }
 31             else
 32             {
 33                C[i]=-(int) (m1+Math.random()*(m2-m1+1));
 34             }
 35         }
 36         //随机产生数组D[N]
 37         for(int i=0;i<n;i++)
 38         {
 39             a=rand.nextInt(2);
 40             if(a==0)
 41             {
 42                D[i]=(int) (Math.random()*(100));
 43             }
 44             else
 45             {
 46                D[i]=-(int) (Math.random()*(100));
 47             }
 48         }
 49         //计算int32 型溢出时的结果 
 50         b=C[0];
 51         MAX=b;
 52         for(int i=1;i<n;i++)
 53         {
 54             if(b<0)
 55             {
 56                 b=C[i];
 57                 if(MAX<b)
 58                 {
 59                    MAX=b;
 60                 }
 61             }
 62             else
 63             {
 64                 if(C[i]<=0)
 65                 {
 66                     if(MAX<b)
 67                     {
 68                         MAX=b;
 69                     }
 70                     b=b+C[i];
 71                 }
 72                 else
 73                 { 
 74                     b=b+C[i];
 75                     if(MAX<b)
 76                     {
 77                         MAX=b;
 78                     }
 79                 }
 80                 
 81             }
 82         }
 83         //通过转化成double型计算
 84         b2=C[0];
 85         MAX2=b2;
 86         for(int i=1;i<n;i++)
 87         {
 88             if(b2<0)
 89             {
 90                 b2=C[i];
 91                 if(MAX2<b2)
 92                 {
 93                    MAX2=b2;
 94                 }
 95             }
 96             else
 97             {
 98                 if(C[i]<=0)
 99                 {
100                     if(MAX2<b2)
101                     {
102                         MAX2=b2;
103                     }
104                     b2=b2+C[i];
105                 }
106                 else
107                 { 
108                     b2=b2+C[i];
109                     if(MAX2<b2)
110                     {
111                         MAX2=b2;
112                     }
113                 }
114                 
115             }
116         }
117         //通过转化成long型计算
118         b1=Long.valueOf(C[0]);
119         MAX1=b1;
120         for(int i=1;i<n;i++)
121         {
122             if(b1<0)
123             {
124                 b1=Long.valueOf(C[i]);
125                 if(MAX1<b1)
126                 {
127                    MAX1=b1;
128                 }
129             }
130             else
131             {
132                 if(C[i]<=0)
133                 {
134                     if(MAX1<b1)
135                     {
136                         MAX1=b1;
137                     }
138                     b1=b1+Long.valueOf(C[i]);
139                 }
140                 else
141                 { 
142                     b1=b1+Long.valueOf(C[i]);
143                     if(MAX1<b1)
144                     {
145                         MAX1=b1;
146                     }
147                 }
148                 
149             }
150         }
151         //普通的程序处理1000个元素的结果
152         b3=D[0];
153         MAX3=b3;
154         for(int i=1;i<n;i++)
155         {
156             if(b3<0)
157             {
158                 b3=D[i];
159                 if(MAX3<b3)
160                 {
161                    MAX3=b3;
162                 }
163             }
164             else
165             {
166                 if(D[i]<=0)
167                 {
168                     if(MAX3<b3)
169                     {
170                         MAX3=b3;
171                     }
172                     b3=b3+D[i];
173                 }
174                 else
175                 { 
176                     b3=b3+D[i];
177                     if(MAX3<b3)
178                     {
179                         MAX3=b3;
180                     }
181                 }
182                 
183             }
184         }
185         
186         System.out.println("测试int31型 数组为:");
187         for(int i=0;i<n;i++)
188         {
189             System.out.print(C[i]+" ");
190             if((i+1)%100==0)
191             {
192                 System.out.println();
193             }
194         }
195         
196         System.out.println("测试程序处理1000个元素 的数组为:");
197         for(int i=0;i<n;i++)
198         {
199             System.out.print(D[i]+" ");
200             if((i+1)%100==0)
201             {
202                 System.out.println();
203             }
204         }
205         
206         System.out.println();
207         
208         System.out.println("数组元素为1000个,100以内随机取数:");
209         System.out.println("最大数组和为:"+MAX3);
210         System.out.println();
211         
212         System.out.println("int32 类型溢出测试:");
213         System.out.println("溢出显示的结果,最大数组和为:"+MAX);
214         System.out.println("解决以后的结果,最大数组和为:(1)求最大子数组和时用double型:"+MAX2);
215         System.out.println("                    (2)求最大子数组和时用long型:"+MAX1);
216         
217         
218     }
219     
220 }

(2)截图:

(3)总结:

团队开发可以使解决问题的的方法更多,在本次开发中如果仅用int32,超出范围时显示的结果是int32范围的最大值。

解决:利用long型,或double型增大数值范围

(4)团队:

 

posted @ 2015-04-01 17:13  ruanjian1305  阅读(135)  评论(0编辑  收藏  举报