用android去写一个小程序
前言:
软工的一个小作业:实现“黄金分割小游戏”, 需要结对编程,队友:陈乐云 共用时两天。
早期思路设计:
采用键值对的形式,以Map作为存储结构。优点:能够将数据与用户对应,缺点:采用java实现过于复杂,工程量过大,需要消耗大量资源,类型转换容易出错。
后期思路设计:
采用二维数组:第一行用于存储用户输入原始数据,第二行用于存储中间数据(第一行的与G值做差的绝对值),第三行用于保存用户得分。
优点:实现简单,易于运算
分工:
前期:陈乐云负界面设计 和 代码的检查 中期: 陈乐云负责代码的检查,bug检查 后期:陈乐云负责App测试
我负责算法的实现,界面优化 我负责编码和bug订正 我负界面的优化,代码调试
App界面设计过程:


第一版代码:
第一版代码只是简单的实现后台的部分逻辑,主要用于测试逻辑的准确性,并没有做具体的测试。
package cn.sau.Test; import java.util.Arrays;
import java.util.Collection; public class testGolden {
static int number = 10;
public static void main(String[] args) {
double[][] array = new double[10][3];
for(int i = 0 ;i<number;i++)
{
for(int j = 0 ;j<2;j++)
if(j==0)
array[i][j]=i+10;
else
{
array[i][2]=0;
array[i][j] = 0; }
}
//平均值
double average = 0;
for(int i = 0; i<number;i++){
average = average +array[i][0];
}
int x = number;
average = average /x; //G值
double G =average *0.618; //相近度
for(int i = 0; i<number;i++){
array[i][1] = Math.abs(array[i][0] -average);
} //min:最近; max:最远
double min = array[0][1];
double max = array[0][1];
for(int i = 1; i<number; i++){
if(min >array[i][1]){
min =array[i][1];
}
if(max<array[i][1]){
max =array[i][1];
}
}
System.out.println("max:"+max +"\n min:" +min);
//统计得分
for(int i = 0; i<number;i++){
if(array[i][1]==min){
array[i][2] =number;
}
else if(array[i][1] == max){
array[i][2]=-2;
}
} for(int i = 0 ;i<10;i++)
{ System.out.print(array[i][2] +"\n"); }
} }
第二版代码:
第二版代码主要是在第一个版的基础上,实现对android平台的移植,比进行了大量的测试。
package com.example.m.goldengame10; import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView; /*
黄金分割小游戏1.0版本
实现以下功能:
单机操作
固定用户为10
2016/10/16
作者:Finch & xiaoPang
*/ public class MainActivity extends AppCompatActivity { int number =10; //总人数
int count = 1; //局数判断
double[][] array = new double[10][3]; TextView news ;
EditText user1 ;
EditText user2;
EditText user3 ;
EditText user4;
EditText user5;
EditText user6 ;
EditText user7 ;
EditText user8 ;
EditText user9 ;
EditText user10;
Button submit ;
Button clean; protected void onCreate(Bundle savedInstanceState) {
Log.v("Button","on");
for(int i = 0; i<number;i++){
array[i][0]=0;
array[i][1]=0;
array[i][2]=0;
} super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
news =(TextView)findViewById(R.id.news);
user1 = (EditText)findViewById(R.id.user1);
user2 = (EditText)findViewById(R.id.user2);
user3 = (EditText)findViewById(R.id.user3);
user4 = (EditText)findViewById(R.id.user4);
user5 = (EditText)findViewById(R.id.user5);
user6 = (EditText)findViewById(R.id.user6);
user7 = (EditText)findViewById(R.id.user7);
user8 = (EditText)findViewById(R.id.user8);
user9 = (EditText)findViewById(R.id.user9);
user10 = (EditText)findViewById(R.id.user10);
submit =(Button)findViewById(R.id.submit);
clean =(Button)findViewById(R.id.clean);
submit.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){ news.setText("第"+count+"局得分");
array[0][0] =Double.parseDouble( user1.getText().toString());
array[1][0] =Double.parseDouble( user2.getText().toString());
array[2][0] =Double.parseDouble( user3.getText().toString());
array[3][0] =Double.parseDouble( user4.getText().toString());
array[4][0] =Double.parseDouble( user5.getText().toString());
array[5][0] =Double.parseDouble( user6.getText().toString());
array[6][0] =Double.parseDouble( user7.getText().toString());
array[7][0] =Double.parseDouble( user8.getText().toString());
array[8][0] =Double.parseDouble( user9.getText().toString());
array[9][0] =Double.parseDouble( user10.getText().toString()); //平均值
double average = 0;
for(int i = 0; i<number;i++){
average = average +array[i][0];
}
int x = number;
average = average /x; //G值
double G =average *0.698; //相近度
for(int i = 0; i<number;i++){
array[i][1] = Math.abs(array[i][0] -G);
} //min:最近; max:最远
double min = array[0][1];
double max = array[0][1];
for(int i = 1; i<number; i++){
if(min >array[i][1]){
min =array[i][1];
}
if(max<array[i][1]){
max =array[i][1];
}
} //统计得分
for(int i = 0; i<number;i++){
if(array[i][1]==min){
array[i][2] =array[i][2] + number;
}
else if(array[i][1] == max){
array[i][2]=array[i][2]-2;
}
} user1.setText(String.valueOf(array[0][2]));
user2.setText(String.valueOf(array[1][2]));
user3.setText(String.valueOf(array[2][2]));
user4.setText(String.valueOf(array[3][2]));
user5.setText(String.valueOf(array[4][2]));
user6.setText(String.valueOf(array[5][2]));
user7.setText(String.valueOf(array[6][2]));
user8.setText(String.valueOf(array[7][2]));
user9.setText(String.valueOf(array[8][2]));
user10.setText(String.valueOf(array[9][2]));
count++; //每提交一次,局数加一
}
}); clean.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){ //初始化
for(int i= 0;i<number;i++){
array[i][0]=0;
array[i][1]=0;
news.setText("开始第"+count+"局,请输入数值");
news.setTextSize(30);
}
//自动清空数据
user1.getText().clear();
user2.getText().clear();
user2.getText().clear();
user3.getText().clear();
user4.getText().clear();
user5.getText().clear();
user6.getText().clear();
user7.getText().clear();
user8.getText().clear();
user9.getText().clear();
user10.getText().clear();
}
});
}
}
App界面设计:

App测试:

代码测试图集:

App测试其他图集:

总结:针对本次作业,我们还有很多需要完善的地方:1,未能实现联机模式,导致用户体验不好
2,界面设计过于简陋,体验稍差
3,算法实现未能考虑人数不确定性
当然,我们会在后期系统的学习java和android后,会及时的做出更正。
附:
android studio 项目 代码:https://git.coding.net/fench/GodlenGame-on-android.git
App下载地址A(欢迎试玩):GoldernGameAPK
队友陈乐云的博客链接:http://www.cnblogs.com/clyln/ coding账号:https://coding.net/u/Clyln), finch
2016-10-17
用android去写一个小程序的更多相关文章
- 写一个小程序实现win系统定时锁屏
貌似很久没写程序了,随便用C语言实现吧 #include<stdio.h> #include<stdlib.h> int main(){ system("rundll ...
- 下载eclipse 配置eclipse 新建Java项目 写一个小程序 运行
为了更好的学习java,我打算下载个eclipse 地址:https://www.eclipse.org/downloads/packages/ 我们需要下载的版本是Eclipse IDE for J ...
- 【Java】一个小程序,计算它包含的代码所需的耗时
写一个小程序,用来计算它包含的代码所需的耗时.虽然简单,测试代码是否耗时还是有点用的,不用重新写嘛~ import java.util.Date; import java.util.concurren ...
- 自学Android的第一个小程序(小布局、button点击事件、toast弹出)
因为上班,学习时间有限,昨晚才根据教程写了一个小程序,今天忙里偷闲写一下如何实现的,来加深一下印象. 首先创建一个Android项目, 通过activity_xxx.xml布局文件来添加组件来达到自己 ...
- 像VUE一样写微信小程序-深入研究wepy框架
像VUE一样写微信小程序-深入研究wepy框架 微信小程序自发布到如今已经有半年多的时间了,凭借微信平台的强大影响力,越来越多企业加入小程序开发. 小程序于M页比相比,有以下优势: 1.小程序拥有更多 ...
- 微信小程序开发(一)创建一个小程序Hello World!
开发微信小程序并不是很难,网上有很多小程序开发资料,尤其是微信官方的<小程序开发指南>最详细. 下面是我开发小程序的历程: 第一步,请前往https://mp.weixin.qq.com/ ...
- 写个小程序01 | 注册微信小程序
出于兴趣和学习目的,我想自己做一个基于"子弹笔记(Bullet Journal)"的小程序.由于个人开发经验很有限,只在课程作业中写过 web 前端,所以也不知道多久能写出来(逃) ...
- 写一个ajax程序就是如此简单
写一个ajax程序就是如此简单 ajax介绍: 1:AJAX全称为Asynchronous JavaScript and XML(异步JavaScript和XML),指一种创建交互式网页应用的网页开发 ...
- 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装
在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...
随机推荐
- python excel操作
python操作excel表格(xlrd/xlwt)转载:http://www.cnblogs.com/zhoujie/p/python18.html 最近遇到一个情景,就是定期生成并发送服务器使 ...
- Codeforces Round #375 (Div. 2)
A. The New Year: Meeting Friends 水 #include <set> #include <map> #include <stack> ...
- 摸索探寻之Mac OS 使用及快捷键
刚发现的一个介绍Mac OS入门的帖子,新入手Mac的同学可以看看http://www.cnblogs.com/chijianqiang/archive/2011/08/03/2126593.html ...
- [NOIP2011]聪明的质监员 题解
题目大意: 额--貌似蛮清晰的,就不赘述了. 思路: 首先不难发现M越大Y越小,因此可以二分答案(方向不要弄错),二分出最小的不小于S的Y即可.而计算Y时可用前缀和O(n+m)求得.两种边界情况也要考 ...
- Easyui的Dialog的toolbar的自定义添加
最近一直在写快速定制Web表格,基于Easyui,整个过程使用了大量的Easyui的dialog,每个dialog的代码大部分都雷同,感觉代码出现了很大程度的重复,然后想写一个通用的dialog设置函 ...
- 【SDOI2009】HH的项链
洛谷题目链接 题意: 给定一个长5w静态的序列,询问20w次,每次询问查找一个区间内的元素种类数 染色问题神烦啊,最近刚会做,感觉都可以用统一的方法 首先要算出与一个元素相同的最邻近的上一个元素的位置 ...
- php获取实时汇率数据
支付时常常会用到支付汇率,但汇率数据是实时的,没办法首先设定好,为避免亏损,只能做到实时的了,先推荐个php函数,能实时获取汇率数据.需要curl模块支持. function getExchangeR ...
- ImageLoader
配置ImageLoader 一般我们在使用ImageLoader的时候,需要在应用程序的入口进行它的一个配置,这个配置一般写到Application里边 * public void initImage ...
- securecrt 检测到较旧的配置设置 需要迁移为新格式
secureCRT一直没有关闭,新登录的服务器的配置信息没有保存,一直打开时无法保存的,需要全关了,再打开就正常了!!!
- Unity3D 自定义事件(事件侦听与事件触发)
先来看下效果图,图中点击 Cube(EventDispatcher),Sphere(EventListener)以及 Capsule(EventListener)会做出相应的变化,例子中的对象相互之间 ...