用android去写一个小程序

前言:

软工的一个小作业:实现“黄金分割小游戏”, 需要结对编程,队友:陈乐云    共用时两天。

早期思路设计:

采用键值对的形式,以Map作为存储结构。优点:能够将数据与用户对应,缺点:采用java实现过于复杂,工程量过大,需要消耗大量资源,类型转换容易出错。

后期思路设计:

采用二维数组:第一行用于存储用户输入原始数据,第二行用于存储中间数据(第一行的与G值做差的绝对值),第三行用于保存用户得分。

优点:实现简单,易于运算

分工:

前期:陈乐云负界面设计 和 代码的检查        中期: 陈乐云负责代码的检查,bug检查       后期:陈乐云负责App测试

我负责算法的实现,界面优化                      我负责编码和bug订正                              我负界面的优化,代码调试

App界面设计过程:

用android去写一个小程序

用android去写一个小程序

第一版代码:

第一版代码只是简单的实现后台的部分逻辑,主要用于测试逻辑的准确性,并没有做具体的测试。

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界面设计:

用android去写一个小程序

App测试:

用android去写一个小程序             用android去写一个小程序           用android去写一个小程序           用android去写一个小程序

代码测试图集:

用android去写一个小程序   用android去写一个小程序

App测试其他图集:

用android去写一个小程序

总结:针对本次作业,我们还有很多需要完善的地方: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

上一篇:[No000000]常用软件测试编译环境声明


下一篇:20145206邹京儒 web安全基础实践