zoukankan      html  css  js  c++  java
  • 20165216 结对学习

    Java第七周学习——结对编程

    四则运算

    自动生成小学四则运算题目(加、减、乘、除)(完成)

    支持整数以及多运算符(优先级未能完善)

    支持真分数(未能实现)

    统计正确率(完成)

    设计思路

    假如说随机生产一个随机的四则运算,那么如果说其中数字的个数为n个,那么其运算符为n-1个,其中不考虑括号(未完善)以及真分数,所以不妨假设一个符号的个数控制在100以内(所有随机题的+,-,*,/相加),那么我可以定义一个整数型的数组b[100],其中每个元素都是一个随机数,再以其元素余4+1,控制每个元素的个数都在1~4,1代表+,2代表-,3代表/,4代表*,同理,定义一个数组大小为100的整数数组,里面每个元素的大小同样为一个随机数,为了方便起见,在这里设计每个数的大小不超过10。

    并定义一个数组来表示每个表达式的数字个数,定义为t[100],每个元素的大小同样为随机数。

    对于衔接问题,第一个数和第二个数,可以根据b[0]的大小写出 a[0] b[0] a[1]的大小,定为s.

    随后根据相应的t数组的大小来安排后面的数字,比较难于描述,所以单列出其代码

    for(i=3;i<=a[i];i++){
    if(b[i-2]==1)
    {System.out.printf(" + %d",t[i-1]);
    s=s+t[i-1];}
    if(b[i-2]==2)
    {System.out.printf(" - %d",t[i-1]);
    s=s-t[i-1];}
    if(b[i-2]==3)
    {System.out.printf(" * %d",t[i-1]);
    s=s*t[i-1];}
    if(b[i-2]==4)
    {System.out.printf(" / %d",t[i-1]);
    s=s/t[i-1];}
    }

    因为i是从3开始循环的,所以里面比较的是b[i-2],这个代码会导致优先级有问题,以后改善。

    代码

    import java.util.*;
    public class size {
    public static void main(String args[]){
    Scanner reader=new Scanner(System.in);
    int a[]=new int[100];
    int b[]=new int[100];
    int t[]=new int[100];
    int i=0,j=0;
    int n=0;
    int s=0,c=0;
    float d=0;
    System.out.printf("请问需要生成多少个题目:");
    n=reader.nextInt();
    for(j=0;j<n;j++){
    Random rand=new Random();
    for(i=0;i<100;i++)
    {a[i]=rand.nextInt(6)+1;
    b[i]=rand.nextInt(4)+1;
    t[i]=rand.nextInt(10)+1;
    }
    if(b[0]==1)
    {System.out.printf("%d + %d",t[0],t[1]);
    s=t[0]+t[1];}
    if(b[0]==2)
    {System.out.printf("%d - %d",t[0],t[1]);
    s=t[0]-t[1];}
    if(b[0]==3)
    {System.out.printf("%d * %d",t[0],t[1]);
    s=t[0]*t[1];}
    if(b[0]==4)
    {System.out.printf("%d / %d",t[0],t[1]);
    s=t[0]/t[1];}
    for(i=3;i<=a[i];i++){
    if(b[i-2]==1)
    {System.out.printf(" + %d",t[i-1]);
    s=s+t[i-1];}
    if(b[i-2]==2)
    {System.out.printf(" - %d",t[i-1]);
    s=s-t[i-1];}
    if(b[i-2]==3)
    {System.out.printf(" * %d",t[i-1]);
    s=s*t[i-1];}
    if(b[i-2]==4)
    {System.out.printf(" / %d",t[i-1]);
    s=s/t[i-1];}
    }
    System.out.printf(" =");
    c=reader.nextInt();
    if(s==c)
    {d=d+1;
    System.out.printf("正确");}
    if(s!=c)
    System.out.printf("错误,正确答案为:%d",s);
    System.out.printf(" ");
    }
    System.out.printf("正确率为%f",d/n);}
    }

    UML类图

    目前代码没有完善,而且代码只有一个主类,没有子类。

    功能截图

    其中出现的比较大的问题比如 4/6*8*2,因为数字没有定义为整数型,所以4/6直接为0了,不支持分数,不支持浮点型。还有2*10*4-7/7,根据优先级应为80-1=79,但代码不够完善,直接是80-7=73除7答案为10,其他的地方还好。

    结队感受

    这个代码从构想到实现并没有花太多时间,虽然其中具有很大的局限性,但还算是有效率的“完成”了,在构想最初我们最先想到的就是定义各种随机,其中设想了一个char a[4]={'+','-','*','/'}的随机取符,但后面行不通,原因在于这只是一个符号,系统没有当为运算符去看待,怎么替换就成了一个问题,后来我们一起设想了关于老师推荐的中缀以及后缀的问题,发现理解的不够好,最后我们又回到了一开始的设想,用数字代替,循环加入后面的数字,不过却造成了优先级的问题,所做时间有限,未能完成,或许,下次可以试试判断运算符为乘法和除法的位置,然后将他们向两边分散,直到碰见加法或者减法停止,先将表达式中所有的乘除算出来,再进行加法和除法(依然没有括号,还没想好怎么生成),下次做的更好,一起做思路会快。

    结对学习照

  • 相关阅读:
    HOT Scene!
    Windows Live Beta ONLINE!
    Shanda EZ Mini
    HDR Lighting & Bloom Lighting
    将整张网页存成png图片
    What's NEW in C++/CLI Language
    [快讯] Visual Studio 2005和SQL Server 2005来了!
    [原创] 一劳永逸:关于C/C++中指针、数组与函数复合定义形式的直观解释
    使用模版列来控制在一个GridView中某些列有热连接,某些列无热连接
    七种武器——.NET工程师求职面试必杀技
  • 原文地址:https://www.cnblogs.com/qq2497879550/p/8849740.html
Copyright © 2011-2022 走看看