软件工程个人作业02

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件工程个人作业02相关的知识,希望对你有一定的参考价值。

1.设计思想

  首先创建三个类OperationRandom1SiZeYunSuan(主类)。在主函数中确定出题数量,是否有括号等内容。用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 }
SiZeYunSuan

 

3.运行结果截图

技术分享技术分享技术分享

4.事后总结

  课上时没觉得这个程序有多么难,感觉花费不了多少时间,可实际操作起来却不是这样。避免重复和加括号条件占据了大部分时间。避免重复思路正确就是有一个部分写错变量了,结果花费了几十分钟找到了原因。这个程序还不完美,还有很多需要改进的地方。所以,凡事光想是不行的,只有动手才能发现问题。

5.PSP

技术分享技术分享技术分享

以上是关于软件工程个人作业02的主要内容,如果未能解决你的问题,请参考以下文章

软件工程个人作业02

软件工程个人作业02

软件工程个人作业02

软件工程个人作业02

软件工程个人作业02

软件工程个人作业02