• 用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 +"
     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] +"
    ");
        
            }
        }
        
    
    }

    第二版代码:

        第二版代码主要是在第一个版的基础上,实现对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

  • 相关阅读:
    Cesium中的坐标系及转换
    Cesium Workshop
    window.postMessage 跨窗口,跨iframe javascript 通信
    VUE课程参考---7、跑马灯效果
    VUE课程---9、事件绑定v-on
    VUE课程---8、属性绑定v-bind
    VUE课程---7、解决插值表达式闪烁问题
    小谈chrome调试命令:console.log的使用
    Hadoop平台配置总结
    hadoop 关闭进程时报错no 进程 to stop
  • 原文地址:https://www.cnblogs.com/fench/p/5968126.html
Copyright © 2020-2023  润新知