(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)团队: