软件工程个人作业02
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件工程个人作业02相关的知识,希望对你有一定的参考价值。
1.设计思想
首先创建三个类Operation、Random1和SiZeYunSuan(主类)。在主函数中确定出题数量,是否有括号等内容。用if语句确定操作,根据确定的操作调用Operation类中的加减乘除方法,而Operation类中的方法在需要时调用Random1类中的随机数方法。
2.源程序代码
1 package ceshi; 2 3 import java.util.*; 4 5 public class SiZeYunSuan { 6 7 public static void main(String[] args) { 8 Scanner sca=new Scanner(System.in); 9 Operation op=new Operation(); 10 //确定出题数量 11 System.out.println("输入出题数量 "); 12 int num=sca.nextInt(); 13 //确定数值范围 14 System.out.println("输入进行运算的最低和最高数值范围(整数)"); 15 int min,max; 16 min=sca.nextInt(); 17 max=sca.nextInt(); 18 //确定是否有括号 19 System.out.println("输入 (0)有括号 (1)无括号 "); 20 int k=sca.nextInt(); 21 //有括号 22 if(k==0) 23 op.bra(num, min, max); 24 //无括号 25 else if(k==1){ 26 //确定是否有乘除法 27 int select; 28 System.out.println("除加减法之外,选择运算是否有乘除法 "); 29 System.out.println("输入 (0)无乘除法 (1)只有乘法 (2)只有除法 (3)乘除法均有 "); 30 select=sca.nextInt(); 31 //无乘除法 32 if(select==0){ 33 int select1; 34 System.out.println("选择加减有无负数 (0)有 (1)无 "); 35 select1=sca.nextInt(); 36 if(select1==0){ 37 op.add0(num/2,min,max); 38 op.subt0(num-num/2,min,max); 39 } 40 else if(select1==1){ 41 op.add1(num/2,min,max); 42 op.subt1(num-num/2,min,max); 43 } 44 else 45 System.out.println("无此选项 "); 46 } 47 //只有乘法 48 else if(select==1){ 49 int select1; 50 System.out.println("选择加减有无负数 (0)有 (1)无 "); 51 select1=sca.nextInt(); 52 //加减有负数 53 if(select1==0){ 54 op.add0(num/3,min,max); 55 op.subt0(num/3,min,max); 56 op.mul(num-2*(num/3),min,max); 57 } 58 //加减无负数 59 else if(select1==1){ 60 op.add1(num/3,min,max); 61 op.subt1(num/3,min,max); 62 op.mul(num-2*(num/3),min,max); 63 } 64 else 65 System.out.println("无此选项 "); 66 } 67 //只有除法 68 else if(select==2){ 69 int select1; 70 System.out.println("选择 (0)加减有负数且除法有余数 (1)加减无负数且除法有余数" 71 + " (2)加减有负数且除法无余数 (3)加减无负数且除法无余数"); 72 select1=sca.nextInt(); 73 //加减有负数且除法有余数 74 if(select1==0){ 75 op.add0(num/3,min,max); 76 op.subt0(num/3,min,max); 77 op.div0(num-2*(num/3),min,max); 78 } 79 //加减无负数且除法有余数 80 else if(select1==1){ 81 op.add1(num/3,min,max); 82 op.subt1(num/3,min,max); 83 op.div0(num-2*(num/3),min,max); 84 } 85 //加减有负数且除法无余数 86 else if(select1==2){ 87 op.add0(num/3,min,max); 88 op.subt0(num/3,min,max); 89 op.div1(num-2*(num/3),min,max); 90 } 91 //加减无负数且除法无余数 92 else if(select1==3){ 93 op.add1(num/3,min,max); 94 op.subt1(num/3,min,max); 95 op.div1(num-2*(num/3),min,max); 96 } 97 else 98 System.out.println("无此选项 "); 99 100 } 101 //乘除法均有 102 else if(select==3){ 103 int select1; 104 System.out.println("选择 (0)加减有负数且除法有余数 (1)加减无负数且除法有余数" 105 + " (2)加减有负数且除法无余数 (3)加减无负数且除法无余数"); 106 select1=sca.nextInt(); 107 //加减有负数且除法有余数 108 if(select1==0){ 109 op.add0(num/4,min,max); 110 op.subt0(num/4,min,max); 111 op.mul(num/4,min,max); 112 op.div0(num-3*(num/4),min,max); 113 } 114 //加减无负数且除法有余数 115 else if(select1==1){ 116 op.add1(num/4,min,max); 117 op.subt1(num/4,min,max); 118 op.mul(num/4,min,max); 119 op.div0(num-3*(num/4),min,max); 120 } 121 //加减有负数且除法无余数 122 else if(select1==2){ 123 op.add0(num/4,min,max); 124 op.subt0(num/4,min,max); 125 op.mul(num/4,min,max); 126 op.div1(num-3*(num/4),min,max); 127 } 128 //加减无负数且除法无余数 129 else if(select1==3){ 130 op.add1(num/4,min,max); 131 op.subt1(num/4,min,max); 132 op.mul(num/4,min,max); 133 op.div1(num-3*(num/4),min,max); 134 } 135 else 136 System.out.println("无此选项 "); 137 } 138 else 139 System.out.println("无此选项 "); 140 } 141 else 142 System.out.println("无此选项 "); 143 } 144 } 145 package ceshi; 146 class Operation { 147 Random1 ran1=new Random1(); 148 149 //有负数加法 150 void add0(int num,int min,int max){ 151 int a[],b[]; 152 a=new int[num+1]; 153 b=new int[num+1]; 154 a[0]=ran1.setRandom(min,max); 155 b[0]=ran1.setRandom(min,max); 156 for(int i=0;i<num;i++){ 157 boolean bo=true; 158 int j=0; 159 //避免重复 160 while(bo&&(i!=0)){ 161 while((a[i]==a[j]&&b[i]==b[j])||(a[i]==b[j]&&b[i]==a[j])){ 162 a[i]=ran1.setRandom(min,max); 163 b[i]=ran1.setRandom(min,max); 164 j=0; 165 } 166 j++; 167 if(j==i) 168 bo=false; 169 } 170 if(i%2==0) 171 System.out.println(a[i]+" + "+"("+-b[i]+")"+" = "); 172 else 173 System.out.println(a[i]+" + "+b[i]+" = "); 174 a[i+1]=ran1.setRandom(min,max); 175 b[i+1]=ran1.setRandom(min,max); 176 } 177 } 178 //无负数加法 179 void add1(int num,int min,int max){ 180 int a[],b[]; 181 a=new int[num+1]; 182 b=new int[num+1]; 183 a[0]=ran1.setRandom(min,max); 184 b[0]=ran1.setRandom(min,max); 185 for(int i=0;i<num;i++){ 186 boolean bo=true; 187 int j=0; 188 //避免重复 189 while(bo&&(i!=0)){ 190 while((a[i]==a[j]&&b[i]==b[j])||(a[i]==b[j]&&b[i]==a[j])){ 191 a[i]=ran1.setRandom(min,max); 192 b[i]=ran1.setRandom(min,max); 193 j=0; 194 } 195 j++; 196 if(j==i) 197 bo=false; 198 } 199 System.out.println(a[i]+" + "+b[i]+" = "); 200 a[i+1]=ran1.setRandom(min,max); 201 b[i+1]=ran1.setRandom(min,max); 202 } 203 } 204 //有负数减法 205 void subt0(int num,int min,int max){ 206 int a[],b[]; 207 a=new int[num+1]; 208 b=new int[num+1]; 209 a[0]=ran1.setRandom(min,max); 210 b[0]=ran1.setRandom(min,max); 211 212 for(int i=0;i<num;i++){ 213 boolean bo=true; 214 int j=0; 215 //避免重复 216 while(bo&&(i!=0)){ 217 while(a[i]==a[j]&&b[i]==b[j]){ 218 a[i]=ran1.setRandom(min,max); 219 b[i]=ran1.setRandom(min,max); 220 j=0; 221 } 222 j++; 223 if(j==i) 224 bo=false; 225 } 226 if(i%2==0) 227 System.out.println(a[i]+" - "+"("+-b[i]+")"+" = "); 228 else 229 System.out.println(a[i]+" - "+b[i]+" = "); 230 a[i+1]=ran1.setRandom(min,max); 231 b[i+1]=ran1.setRandom(min,max); 232 } 233 } 234 //无负数减法 235 void subt1(int num,int min,int max){ 236 int a[],b[]; 237 a=new int[num+1]; 238 b=new int[num+1]; 239 a[0]=ran1.setRandom(min,max); 240 b[0]=ran1.setRandom(min,max); 241 for(int i=0;i<num;i++){ 242 boolean bo=true; 243 int j=0; 244 //避免重复 245 while(bo&&(i!=0)){ 246 while((a[i]==a[j]&&b[i]==b[j])||(a[i]==b[j]&&b[i]==a[j])){ 247 a[i]=ran1.setRandom(min,max); 248 b[i]=ran1.setRandom(min,max); 249 j=0; 250 } 251 j++; 252 if(j==i) 253 bo=false; 254 } 255 if(a[i]>=b[i]) 256 System.out.println(a[i]+" - "+b[i]+" = "); 257 else 258 System.out.println(b[i]+" - "+a[i]+" = "); 259 a[i+1]=ran1.setRandom(min,max); 260 b[i+1]=ran1.setRandom(min,max); 261 } 262 } 263 //乘法 264 void mul(int num,int min,int max){ 265 int a[],b[]; 266 a=new int[num+1]; 267 b=new int[num+1]; 268 a[0]=ran1.setRandom(min,max); 269 b[0]=ran1.setRandom(min,max); 270 for(int i=0;i<num;i++){ 271 boolean bo=true; 272 int j=0; 273 //避免重复 274 while(bo&&(i!=0)){ 275 while((a[i]==a[j]&&b[i]==b[j])||(a[i]==b[j]&&b[i]==a[j])){ 276 a[i]=ran1.setRandom(min,max); 277 b[i]=ran1.setRandom(min,max); 278 j=0; 279 } 280 j++; 281 if(j==i) 282 bo=false; 283 } 284 System.out.println(a[i]+" x "+b[i]+" = "); 285 a[i+1]=ran1.setRandom(min,max); 286 b[i+1]=ran1.setRandom(min,max); 287 } 288 } 289 //除法有余数 290 void div0(int num,int min,int max){ 291 int a[],b[]; 292 a=new int[num+1]; 293 b=new int[num+1]; 294 a[0]=ran1.setRandom(min,max); 295 b[0]=ran1.setRandom(min,max); 296 for(int i=0;i<num;i++){ 297 boolean bo=true; 298 int j=0; 299 //避免重复 300 while(bo&&(i!=0)){ 301 while((a[i]==a[j]&&b[i]==b[j])||(b[i]==0)){ 302 a[i]=ran1.setRandom(min,max); 303 b[i]=ran1.setRandom(min,max); 304 j=0; 305 } 306 j++; 307 if(j==i) 308 bo=false; 309 } 310 System.out.println(a[i]+" ÷ "+b[i]+" = "); 311 a[i+1]=ran1.setRandom(min,max); 312 b[i+1]=ran1.setRandom(min,max); 313 } 314 } 315 //除法无余数 316 void div1(int num,int min,int max){ 317 int a[],b[]; 318 a=new int[num+1]; 319 b=new int[num+1]; 320 a[0]=ran1.setRandom(min,max); 321 b[0]=ran1.setRandom(min,max); 322 for(int i=0;i<num;i++){ 323 boolean bo=true; 324 int j=0; 325 //有余数时重新出题 326 while((b[i]==0)||(a[i]%b[i]!=0)){ 327 boolean bo1=true; 328 a[i]=ran1.setRandom(min,max); 329 b[i]=ran1.setRandom(min,max); 330 //避免重复 331 while(bo1&&(i!=0)){ 332 while((a[i]==a[j]&&b[i]==b[j])||(b[i]==0)){ 333 a[i]=ran1.setRandom(min,max); 334 b[i]=ran1.setRandom(min,max); 335 j=0; 336 } 337 j++; 338 if(j==i) 339 bo1=false; 340 } 341 } 342 System.out.println(a[i]+" ÷ "+b[i]+" = "); 343 a[i+1]=ran1.setRandom(min,max); 344 b[i+1]=ran1.setRandom(min,max); 345 } 346 } 347 //有括号 348 void bra(int num,int min,int max){ 349 int a[]; 350 a=new int[10]; 351 //确定算式个数 352 for(int j=0;j<num;j++){ 353 int d=ran1.setRandom0(8)+3;//括号内数的个数 354 for(int i=0;i<d;i++){ 355 int c1=ran1.setRandom0(4);//确定运算符号 356 a[i]=ran1.setRandom(min,max);//确定参加运算的数 357 358 if(i==0) 359 System.out.print("("); 360 System.out.print(a[i]); 361 if(i==(d/2)) 362 System.out.print(")"); 363 364 if(c1==0&&i!=d-1) 365 System.out.print("+"); 366 if(c1==1&&i!=d-1) 367 System.out.print("-"); 368 if(c1==2&&i!=d-1) 369 System.out.print("x"); 370 if(c1==3&&i!=d-1) 371 System.out.print("÷"); 372 if(i==d-1) 373 System.out.println("="); 374 } 375 } 376 377 } 378 } 379 package ceshi; 380 381 import java.util.Random; 382 383 class Random1 { 384 int setRandom(int min,int max){ 385 Random ran=new Random(); 386 int r=ran.nextInt(max-min+1)+min; 387 return r; 388 } 389 int setRandom0(int num){ 390 Random ran=new Random(); 391 int r=ran.nextInt(num); 392 return r; 393 } 394 }
3.运行结果截图
4.事后总结
课上时没觉得这个程序有多么难,感觉花费不了多少时间,可实际操作起来却不是这样。避免重复和加括号条件占据了大部分时间。避免重复思路正确就是有一个部分写错变量了,结果花费了几十分钟找到了原因。这个程序还不完美,还有很多需要改进的地方。所以,凡事光想是不行的,只有动手才能发现问题。
5.PSP
以上是关于软件工程个人作业02的主要内容,如果未能解决你的问题,请参考以下文章