一.题目要求

本次作业要求两个人合作完成,驾驶员和导航员角色自定,鼓励大家在工作期间角色随时互换,这里会布置两个题目,请各组成员根据自己的爱好任选一题。

这次我和我的小伙伴选择了题目一。

  • 题目1:

    • 实现一个小学四则运算自动生成程序,要求:

      • 能够自动生成四则运算练习题
      • 可以定制题目数量
      • 用户可以选择运算符
      • 用户设置最大数(如十以内、百以内等)
      • 用户选择是否有括号、是否有小数
      • 用户选择输出方式(如输出到文件、打印机等)
      • 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)

二.分工

此次结队编程,我身份为驾驶员,我的小伙伴姜同学身份为领航员。

在这里贴上我们的工作照

三.开发环境、设计思路

  • IDE:Android Studio 3.1
  • 开发语言:java
  • 软件运行环境:android6.0及以上
  • 设计思路:用listview来显示随机生成的四则运算,editview来获取输入条件,checkbox供用户选择操作符、括号或小数,一个button来生成随机四则运算到listview上显示,生成后点击listview的项,即在该项上显示该项算式所对应的结果。

四.代码

代码地址:https://github.com/xiepeiliang/Pair_Programming/tree/master/Pair_Programming

为了避免篇幅太长,我就在这里展示部分功能代码

生成随机的四则运算,里面的step1()、step2()、step3()是我写的生成随机算式的三个步骤,详细可见上方代码地址。

//构建随机式,成功则返回1,失败则返回0
public int buildItems(int sum) {
if(sum<=0)return 0;
items = new String[sum];
itemLen = new int[sum];
leftbra = new boolean[sum];
rightbra = new boolean[sum];
result = new double[sum];
Random random1 = new Random();
///items初始化,与每个items长度,以及括号状态
for (int i = 0; i < sum; i++) {
items[i] = "";
///定义式子最多有4个数,最少2个,括号情况下3个或4个
if (bracker==false)
itemLen[i] = random1.nextInt(3) + 2;
else
itemLen[i] = random1.nextInt(2) + 3;
///括号状态
leftbra[i] = false;
rightbra[i] = false;
result[i] = -1;
}
try {
step1();
step2();
step3();
} catch (Exception e) {
return 0;
}
return 1;
}

出错逻辑处理,返回出错类型并返回出错类型,返回0则无错,1为max、sum输入不合法,2为sum

public int dealError(String sum_str, String max_str, boolean checked) {
//editview非法输入捕捉
try {
sum = Integer.parseInt(sum_str);
max = Float.parseFloat(max_str);
} catch (Exception e) {
return 1;
} finally {
if(max<=0||sum<=0)
return 1;
}
if (sum >= 100000) {
return 2;
}
if (checked == false) {
return 3;
}
return 0;
}

生成按钮监听,按下根据条件生成随机算式,装入字符串数组items[]中,在将items[]装入listview的适配器中以达到在listview中显示的功能。

//悬浮按钮点击监听
@Override
public void onClick(View v) {
if (v.getId() == R.id.fab) {
int mark = dealError(editText1.getText().toString(), editText2.getText().toString(), getOperatorArray(add,sub,mul,div));
//无错
if (mark == 0) {
int temp = buildItems(sum);
if (temp == 1) {
//listview装入数据
adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, items);
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
Snackbar.make(v, "已生成你的四则运算啦^_^", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
} else {
Snackbar.make(v, "生成失败^_^", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
}
//sum,max不合法
else if (mark == 1) {
Snackbar.make(v, "请检查下条件是否合理哟^_^", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
//sum和法,但太大
else if (mark == 2) {
Snackbar.make(v, "生成题目数量太多小朋友消化不了哟^_^", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
//没有选操作符
else if (mark == 3) {
Snackbar.make(v, "您忘了选操作符哟^_^", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
}
}

五.app展示

安装包已经上传到我的百度网盘。

apk下载地址:https://pan.baidu.com/s/1R-Xbc7ExrmjgjnW0BYM_Xg

进入app

非法输入处理



生成题目





六. 对小伙伴的评价及总结

这是第二次和姜同学合作了,姜同学作为领航员,辅助我完成了这个App的设计与编写。驾驶员能不能到达目的地,除了看驾驶员的驾驶技巧之外,还是得靠领航员的指引与辅助。我的小伙伴就在这次的结队编程中给了我莫大的鼓励与引导。比如在设计UI界面的时候,作为女生对美具有天生的感受,姜同学给了我一些设计上的很好的意见,使得原本生硬的界面看起来美观了些。在我编写代码的时候,我无意之中犯的不管是语法上的还是逻辑上的错误在经过她清晰的思维后都能及时反馈给我,使我少走了些弯路。合作很愉快,男女搭配干活不累吧,这次的编码工作也不像原来自己那样一个人憋在宿舍自己敲键盘那样枯燥与乏味。尤其是在测试阶段,经过姜同学的分析后,发现我的代码的函数里有些地方冗杂且不清晰,复杂或重复的地方应该设计另外的函数然后使之耦合,所提的建议我觉得是对我写代码很好的提高与促进。所以,评价谈不上,更多的是感谢吧_

因为此前有过开发android应用的经历,android开发也一直在捣鼓,所以此次的设计与编写代码没有遇到太大的阻碍。就是在设计过程中大问题没有,倒是被一些小细节绊脚,比如ListView中对item的监听,误用方法setOnClickListener(),实则该用setOnItemClickListener(),这个小错误就浪费了很多时间和精力。这就暴露出了问题:对控件的方法的不熟悉---还不清楚混凝土是怎么和的就去造房233。自己在知道怎么用的同时也需要去知道它里面是怎么实现的这是更重要的。总之,这是一次很有价值的能够提高自我的结对编程经历。

不足的地方:对于这款应用的屏幕适配我没有做广泛的适配,在1080*1920分辨率的手机上可以正常显示界面,在高于或低于1080*1920分辨率的手机上显示可能会出现界面布局拉伸或挤压或重叠的异常,在具有类似华为手机的屏幕内虚拟按键的手机上,listview会被虚拟按键顶上去从而可能挡住其他控件。而后对于设计上可能有点用户不友好,比如设计的listview是可以点击显示答案的,可是没有提示让用户去点啊,用户不知道有这个功能啊等等,由于时间急迫,就这样先交了作业。等等这些都是值得改进的地方。

结队编程第二次作业:Android自动生成算式应用的更多相关文章

  1. 作业二:个人编程项目——编写一个能自动生成小学四则运算题目的程序

    1. 编写一个能自动生成小学四则运算题目的程序.(10分)   基本要求: 除了整数以外,还能支持真分数的四则运算. 对实现的功能进行描述,并且对实现结果要求截图.   本题发一篇随笔,内容包括: 题 ...

  2. Android 自动生成的R类

    资源文件的使用分为在代码中使用和在其他资源文件中引用该资源文件.在我们编译一个Android应用时,Android会自动生成一个R类,在该类中根据不同的资源类型又生成了相应的内部类,该类包含了系统中使 ...

  3. ANDROID 自动生成动态表格for

    简单的栗子去了解这个自动生成的动态的控件(自动生成表格) /cs-Layout/res/layout/activity_main.xml <LinearLayout xmlns:android= ...

  4. 软件工程第二次作业(Android Studio利用Junit进行单元测试)

    一.开发工具的安装和运行 1.安装 由于我的电脑之前就安装好了Android Studio,就不再重装了.在这里就给出几条安装过程中需要注意的地方吧: 安装包最好在官网下载已经带有Android SD ...

  5. 高级软件工程第二次作业:随机生成N个不重复的已解答完毕的数独棋盘

    #include <stdio.h> #include "SuduCheck.h" ][],int i,int j,int k) //判断是否可以将第i行.第j列的数设 ...

  6. Android 自动生成表格

    Layout.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  7. 南京邮电大学java程序设计作业在线编程第二次作业

    王利国的"Java语言程序设计第2次作业(2018)"详细 作业结果详细 总分:100 选择题得分:60  1. 表达式9==8&&3<7的运算结果是( ) ...

  8. android 自动生成jni C语言头文件

    1. 在类里面申明 public native xxx(); 函数接口2. 在安卓工程src目录下 使用命令 javah 包名.类名 生成该类所申明的c语言接口

  9. c++生成算式并计算(《构建之法》第一章课后第一题)

    c++实现计算器(自动生成算式并计算) 要满足的需求有以下几个: 自动生成随机的四则运算算式,包含括号和小数. 对生成的算式计算出结果. 算式.结果分别存储到不同的文件. 一 生成算式 由上述需求可知 ...

随机推荐

  1. 浅谈ES6新特性

    ES6的了解 新增模板字符串(为JavaScript提供了简单的字符串插值功能).箭头函数(操作符左边为输入的参数,而右边则是进行的操作以及返回的值Inputs=>outputs.).for-o ...

  2. Sprint第一个冲刺(第二天)

    一.Sprint介绍 今天我们完成了欢迎界面及美化的任务,即完成了此次整个Sprint的百分之七,登录界面及美化.注册界面(管理员).注册界面(餐厅员工)和注册界面(消费者),这几个任务也在进行时.这 ...

  3. @Autowired & @Resource 区别 & 解读@Bean

    一样     Autowired & @Resource 都可以用来Bean的注入,可以写在属性(字段)上.也可以写在setter方法上 不一样 1.来源不一样 @Autowired 由Spr ...

  4. 树的遍历——pat1043

    http://pat.zju.edu.cn/contests/pat-a-practise/1043 给予N个数字组成二叉搜索树,判断这个数列是否由先序遍历得出或是镜像先序遍历得出,若是则输出相应的后 ...

  5. laravel路由定义

    参考http://www.ruchee.com/notes/fms/laravel_primer.html 路由 路由定义位置在 app/routes.php 文件,支持五种路由方法,采用回调函数的形 ...

  6. java代码------实现从控制台输入整型,

    总结:主要是方法的调用不能错,比如浮点型,整型,字节型,so.on int ====hasNextInt() float--------hasNextfloat() short ====hasNext ...

  7. 安装SQL Servre2000时提示“command line option syntax error! type command /? for help”

    问题: 当程序正在安装ms数据访问组件时,弹出错误提示框:command line option syntax error,type command/? for help,点击确定继续:到了程序正在安 ...

  8. 第六章 通过Service访问Pod(上)

    不应该直接使用Pod的ID地址作为对外提供服务的接口,应为一旦Pod重启,IP地址就变化了,解决方案是使用Service. 6.1 创建Service K8s service从逻辑上代表了一组Pod, ...

  9. SVN的学习

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于CVS,它采用了分支管理系统,它的设计目标就是取代CVS 为什么需要SVN 通常软件开发由多人协作开发,如果对代码文件.配置文 ...

  10. 【BZOJ】2657: [Zjoi2012]旅游(journey)(树的直径)

    题目 传送门:QWQ 分析 在任意两个不相邻的点连一条线,求这条线能穿过几个三角形. 建图比较讲究(详见代码) 求树的直径. 代码 #include <bits/stdc++.h> usi ...