结队编程第二次作业:Android自动生成算式应用
一.题目要求
本次作业要求两个人合作完成,驾驶员和导航员角色自定,鼓励大家在工作期间角色随时互换,这里会布置两个题目,请各组成员根据自己的爱好任选一题。
这次我和我的小伙伴选择了题目一。
- 题目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. 编写一个能自动生成小学四则运算题目的程序.(10分) 基本要求: 除了整数以外,还能支持真分数的四则运算. 对实现的功能进行描述,并且对实现结果要求截图. 本题发一篇随笔,内容包括: 题 ...
- Android 自动生成的R类
资源文件的使用分为在代码中使用和在其他资源文件中引用该资源文件.在我们编译一个Android应用时,Android会自动生成一个R类,在该类中根据不同的资源类型又生成了相应的内部类,该类包含了系统中使 ...
- ANDROID 自动生成动态表格for
简单的栗子去了解这个自动生成的动态的控件(自动生成表格) /cs-Layout/res/layout/activity_main.xml <LinearLayout xmlns:android= ...
- 软件工程第二次作业(Android Studio利用Junit进行单元测试)
一.开发工具的安装和运行 1.安装 由于我的电脑之前就安装好了Android Studio,就不再重装了.在这里就给出几条安装过程中需要注意的地方吧: 安装包最好在官网下载已经带有Android SD ...
- 高级软件工程第二次作业:随机生成N个不重复的已解答完毕的数独棋盘
#include <stdio.h> #include "SuduCheck.h" ][],int i,int j,int k) //判断是否可以将第i行.第j列的数设 ...
- Android 自动生成表格
Layout.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...
- 南京邮电大学java程序设计作业在线编程第二次作业
王利国的"Java语言程序设计第2次作业(2018)"详细 作业结果详细 总分:100 选择题得分:60 1. 表达式9==8&&3<7的运算结果是( ) ...
- android 自动生成jni C语言头文件
1. 在类里面申明 public native xxx(); 函数接口2. 在安卓工程src目录下 使用命令 javah 包名.类名 生成该类所申明的c语言接口
- c++生成算式并计算(《构建之法》第一章课后第一题)
c++实现计算器(自动生成算式并计算) 要满足的需求有以下几个: 自动生成随机的四则运算算式,包含括号和小数. 对生成的算式计算出结果. 算式.结果分别存储到不同的文件. 一 生成算式 由上述需求可知 ...
随机推荐
- ubnut16.4 下 设置静态ip
一.编辑interfaces sudo vi /etc/network/interface ### i 键进入编辑 二.编辑该文件 auto loiface lo inet loopbackauto ...
- 《DSP using MATLAB》示例Example 8.21
%% ------------------------------------------------------------------------ %% Output Info about thi ...
- UVA11401 Triangle Counting
题意 输入\(n\),输出有多少种方法可以从\(1,2,3,\dots,n\)中选出3个不同的整数,使得以他们为三边长可以组成三角形. \(n \leq 10^6\) 分析 参照刘汝佳的题解. 按最大 ...
- 表格头部与左侧内容随滚动条位置改变而改变(基于jQuery)
效果图如下: HTML代码: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta chars ...
- 【转】MFC对话框和控件
原文网址:http://www.cnblogs.com/tiwlin/archive/2013/05/08/3067966.html 对话框和控件 对话框是Windows应用程序中一种常用的资源,其主 ...
- vue-router做路由拦截时陷入死循环
今天分享一下使用vue-router做路由拦截时遇到的坑. 需要提前了解的api 1:router.beforeEach( to , from ,next) ; to: Route: 即将要进入的目标 ...
- Window下SVN使用总结
1 地址:http://subversion.apache.org/packages.html#windows 找到windows下的svn客户端工具.选择Win32Svn 进行安装. 一般环境变量会 ...
- 在vue中无论使用router-link 还是 @click事件,发现都没法从列表页点击跳转到内容页去
在vue中如论使用router-link 还是 @click事件,发现都没法从列表页点击跳转到内容页去,以前都是可以的,想着唯一不同的场景就是因为运用了scroll组件(https://ustbhua ...
- MFC对话框的Edit控件实现响应Ctrl+A全选,并实现自动/手动换行+滚动条
首先是在Properties中设置控件属性的问题,首先必须得将Mutilines属性设为true,才能支持多行显示. 手动换行(按Enter键换行):将Want Return属性设为true 自动换行 ...
- SQL语句 合并列值 将一列的多个值合并成一行
效果: oralce写法: select WM_CONCAT(A.title) as citys from tmpcity A sql server写法: select stuff((select ' ...