软件工程个人作业02

四则运算2:

设计思路:

程序迭代后,明显复杂了很多,而对于此,只能进行分模块然后针对每一个小的模块进行实现,最后连接到一起。

①:针对避免重复的问题,可以将先生成的式子保存,在后生成的式子中运用if语句进行判断,如果出现重复则重新生成式子。

②:对于可以定制的问题,可以设置全局变量,由用户输入来确定打印的条目。打印方式可以是一行一个或者一行多个,利用全局变量进行控制换行即可。

③:对于是否有乘除法的问题,可以通过switch—case语句进行分割,在无乘除法的分块里只有加减符号参与随机,而乘除法则在另一个模块中。

④:数值的取值范围,仍然采用全局变量,由用户进行确定随机数产生的范围。

⑤:针对加减法有无负数的问题,可以让它产生负数的加减式子,也能在无负减法中判断结果是否大于0,小于0时重新生成。

⑥:对于除法有无余数,有余数时不需要控制,而在没余数时,利用if判断能否整除,不能时取出余数在被除数的基础上减去余数即可。

⑦:针对有括号的多数四则运算,使用随机数控制出现数字的个数,最多定为十个,当然最少得有两个数,在符号数组中加入左扩号“(”,利用两个栈分别存储运算数和运算 符,利用循环产生随机数和随机字符,依次压栈,在输出时根据出栈的字符判断,若出现除号,那么下一位不能为0,为0则重新生成不为0的随机数,出现左括号时先判断所在位置,位置太过于靠后,则用其他运算符替代,出现位置适当则在括号前面加其他随机运算符,并在后两位出现的数字后添加右括号。最后在循环外加上=输出。

源代码:

package 加减乘除;

import java.util.*;

public class Arithmetic {

    public static void main(String[] args) {
         Scanner input=new Scanner(System.in);
            System.out.println("请输入要输出多少道运算题");
            int h=input.nextInt();
            System.out.println("请输入你要计算数的最大值");
            int g=input.nextInt();
            System.out.println("请选择要使用的功能:");
            System.out.println("1.   整数加减法运算");
            System.out.println("2.   整数四则运算");
            System.out.println("3.   分数的加减运算");
            System.out.println("4.   分数的四则运算");
            System.out.println("5.   多数的四则运算(带括号)");
            Random random = new Random();
            char arr[] = {'+','-','*','/','('};
            int a=input.nextInt();
            switch(a)
            { 
            case 1:
            {
                 System.out.println("请选择减法是否有负数;0:无负数,1:有负数");
                 int f=input.nextInt();
                 int i;
                 switch(f)
                 {
                 case 0:
                 {
                     for(i=0;i<h;i++)
                     {
                         String str=random.nextInt(g)+" "+arr[random.nextInt(2)]+" "+random.nextInt(g)+"=";
                          
                         
                         System.out.println(str);
                     }
                     break;
                 }
                 case 1:
                 {
                     for(i=0;i<h;i++)
                     {
                        System.out.println(-random.nextInt()%g+" "+arr[random.nextInt(2)]+" "+(-random.nextInt())%g+"=");
                     }
                     break;
                 }
                 default:
                     System.out.println("输入的数有误,请输入0或1");
                 }
                 break;
            }
            case 2:
            {
                System.out.println("请选择要使用的功能:");
                System.out.println("1.   正整数无余数四则运算!");
                System.out.println("2.   可负整数无余数四则运算!");
                System.out.println("3.   正整数可有余数四则运算");
                System.out.println("4.   可负整数可有余数四则运算");
                int f=input.nextInt();
                 switch(f)
                 {
                 case 1:
                 {
                     for(int i=0;i<h;i++)
                     {
                         int u=random.nextInt(g);
                         int v=random.nextInt(g)+1;
                         char w=arr[random.nextInt(4)];
                         if(u%v==0 && w=='/'){
                             System.out.println(u+" "+w+" "+v+"=");
                         }
                        else
                            System.out.println(u+" "+arr[random.nextInt(3)]+" "+v+"=");
                     }
                     break;
                 }
                 case 2:
                 {
                     for(int i=0;i<h;i++)
                     {
                         int u=-random.nextInt()%g;
                         int v=-random.nextInt()%g;
                         char w=arr[random.nextInt(4)];
                         if(v!=0 && u%v==0 && w=='/' )
                             System.out.println(u+" "+w+" "+v+"=");
                        else
                            System.out.println(u+" "+arr[random.nextInt(3)]+" "+v+"=");
                     }
                     break;
                 }
                 case 3:
                 {
                     for(int i=0;i<h;i++)
                     {
                         int u=random.nextInt(g);
                         int v=random.nextInt(g)+1;
                         char w=arr[random.nextInt(4)];
                         System.out.println(u+" "+w+" "+v+"=");
                     }
                     break;
                 }
                 case 4:
                 {
                     for(int i=0;i<h;i++)
                     {
                     int u=-random.nextInt()%g;
                     int v=-random.nextInt()%g;
                     char w=arr[random.nextInt(4)];
                     System.out.println(u+" "+w+" "+v+"=");
                     }
                     break;
                 }
                 default:
                     System.out.print("输入的数有误,请输入1--4的整数");
                 }
                 
            }
            case 3:
            {
                System.out.println("请选择减法是否有负数;0:无负数,1:有负数");
                 int f=input.nextInt();
                 switch(f)
                 {
                 case 0:
                 {
                     for(int i=0;i<h;i++)
                     {
                        System.out.println(random.nextInt(g)+"/"+random.nextInt(g)+1+" "+arr[random.nextInt(2)]+" "+random.nextInt(g)+"/"+random.nextInt(g)+1+"=");
                     }
                     break;
                 }
                 case 1:
                 {
                     for(int i=0;i<h;i++)
                     {
                        System.out.println(-random.nextInt()%g+"/"+random.nextInt(g)+1+" "+arr[random.nextInt(2)]+" "+-random.nextInt()%g+"/"+random.nextInt(g)+1+"=");
                     }
                     break;
                 }
                 default:
                     System.out.println("输入的数有误,请输入0或1");
                 }
                break;
            }
            case 4:
            {
                System.out.println("请选择要使用的功能:");
                System.out.println("1.   正分数四则运算!");
                System.out.println("2.   可负分数四则运算!");
                int f=input.nextInt();
                 switch(f)
                 {
                 case 1:
                 {
                     for(int i=0;i<h;i++)
                     {
                         int u=random.nextInt(g);
                         int v=random.nextInt(g)+1;
                         int x=random.nextInt(g);
                         int y=random.nextInt(g)+1;
                         char w=arr[random.nextInt(4)];
                        System.out.println(u+"/"+v+" "+w+" "+x+"/"+y+"=");
                     }
                     break;
                 }
                 case 2:
                 {
                     for(int i=0;i<h;i++)
                     {
                         int u=-random.nextInt()%g;
                         int v=random.nextInt(g)+1;
                         int x=-random.nextInt()%g;
                         int y=random.nextInt(g)+1;
                         char w=arr[random.nextInt(4)];
                         if(x!=0 && w=='/' )
                             System.out.println(u+"/"+v+" "+w+" "+x+"/"+y+"=");
                        else
                            System.out.println(u+"/"+v+" "+arr[random.nextInt(3)]+" "+x+"/"+y+"=");
                     }
                     break;
                 }
                 default:
                     System.out.print("输入的数有误,请输入1或2");
                 }
                 break;
            }
            case 5:
            {
                for(int i=0;i<h;i++)
                {
                    int n =random.nextInt(9)+1;
                    Stack<Integer> S1 = new Stack<Integer>();
                    Stack<Character> S2 = new Stack<Character>();
                    for(int j=0;j<n+1;j++)
                    {    
                        char w=' ';
                        
                        int e= random.nextInt()%g;
                        if( w=='/'&&e==0)
                        {
                            e = random.nextInt(g)+1;
                        }
                        w = arr[random.nextInt(5)];
                        S1.push(e);
                        S2.push(w);
                    }
                    int k=0;
                    for(int j=0;j<n;j++)
                    {
                        char m =  S2.pop();
                        if(m=='(')
                        {
                            if(j>n-2)
                                System.out.print(S1.pop()+""+arr[random.nextInt(4)]);
                            else
                            {
                                System.out.print(S1.pop()+""+arr[random.nextInt(4)]+""+ m);
                                k=k+1;
                            }
                        }
                        else
                            System.out.print(S1.pop()+""+ m);
                    }
                    if(k==0)
                    {
                        System.out.println(random.nextInt()%g+"=");
                    }
                    else if(k==1)
                        System.out.println(random.nextInt()%g+")=");
                    else if(k==2)
                        System.out.println(random.nextInt()%g+"))=");
                    else if(k==3)
                        System.out.println(random.nextInt()%g+")))=");
                    else
                        System.out.println(random.nextInt()%g+"))))=");
                }
                break;
            }
            default:
                 {
                     System.out.println("输入的数有误,请输入1--5的整数");
                 }
            }
    }

}

结果截图:

PSP0级记录表:

项目计划日志:

               周活动总结表

               姓名:高开拓                                                                                      日期:2016/3/19

日期\任务 听课 编写程序 阅读文档 查询资料 日统计
周日          
周一 100   20 30 150
周二       20 20
周三       30 30
周四   200 10 30 240
周五   60 10   70
周六   120     120
周总计 100 380 40 110 630

               阶段时间和效率                            周数:第三周

总计 100 380 40 110 630
平均 100 380 40 110 630
最大 100 380 40 110 630
最小 100 380 40 110 630

               以前的各周累计

总计 100 380 40 110 630
平均 100 380 40 110 630
最大 100 380 40 110 630
最小 100 380 40 110 630

时间记录日志:

                学生:高开拓                日期:2016/3/19

                教师:王建民                课程:软件工程概论

日期 开始时间 结束时间 中断时间 净时间 活动 备注
3/14 8:00 9:50 10 100 听课 课间休息
  2:00 2:20   20 阅读文档  
  2:20 2:53 3 30 查询资料 出去
3/15 7:00 7:20   20 查询资料  
3/16 8:20 8:50   30 查询资料  
3/17 16:00 20:20 10+30+20 200 编写程序 阅读文档+查询资料+出去吃饭
3/18 16:30 15:40   70 完善程序加阅读资料  
3/19 9:40 11:45 5 120 完善程序 出去
             

缺陷记录日志:

                    学生:高开拓

                    日期:2016/3/19

                    教员:王建民

                    程序号:02

日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
3/17 01 a 编码 运行 5min  
描述:忘记了在case结束后加上break
  02 a 编码 运行

1min

 
描述:print和println的没有区别,输出时不该换行的地方换行了
  03 a 编码 运行 10min  
描述:随机数生成的范围没有确定好,使得分数的分母出现0
3/18 04 b 测试 编译 5min  
描述:栈的类型确定出现问题定义char类型一直报错,原来需要完整的character
 
  05 b 测试 编译 10min  
描述:判断左括号的语句出错,右括号输出异常
3/19 06 c 测试 编译 20min  
描述:排除括号运算中除数可能为0的情况
             
             
             
             
             
             

 

posted @ 2016-03-19 13:36  q白月倚寒楼  阅读(186)  评论(0编辑  收藏  举报