2016移动开发校赛之Android实践

学校组织的《移动互联网应用软件开发》技能竞赛,所有参赛命题均基于 Android 4.2 版本实现,比赛推荐使用的开发环境为:ADT, JDK 1.6, Android SDK 4.1 
  经过了四天的培训我们小组选择在计算器应用 
计算器能够实现:

1. 数学四则运算 
2. 实现开方元算 
 3. 实现求倒数运算 
 4. 实现百分比运算 
     5. 实现删除一位数字的功能 
     6. 实现删除所有数据的功能 
     7. 实现临时存储数据的功能

  目前我可以完成全部功能,虽然是扩展老师的基础程序,但还是很有成就感的。 
  我们先进行了对Java的培训,多线程、匿名内部类、接口及其子类异常的捕获,然后使用两本书《Android移动应用开发项目教程》和《Android编程权威指南》来开展对Android的学习。给我的感觉是,开发Android应用程序和普通的Java应用程序没有太大区别,最后运行的时候才Android虚拟机上运行就好。 
  开发Android项目的时候虽然老师给我们推荐谷歌推出了新的Android开发环境Android Studio,但是我们用的是带插件的Eclipse,安装好JDK配置好ADT集成开发环境之后就开始了。升级Android SDK也很重要,直接升级的话需要连接Google服务器的,所以是需要翻墙的,为了避免这种情况,也可以到高校自己的网站去升级。就不废话了,上代码。 
  MainActivity.java

package com.wangjingliang.calc;import java.util.*;import com.shiyifei.calc.R;import android.os.Bundle;import android.app.Activity;import android.util.Log;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {

    EditText result;    // 保存当前输入框内容
    String current = "0";    // 保存之前输入的内容
    String prev = "";    // 保存输入状态,是刚刚输入了一个数字,还是输入了一个运算、控制符号
    int status = 0; // 0 刚刚输入了数字, 1刚刚输入了运算符号
    // 保存刚刚输入的运算符号
    String com = "";    //保存存储器中的数值
    String num = "";    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);        // 拿到输入框对象
        result = (EditText) findViewById(R.id.editText1);        // 让输入框一开始显示0
        update();
    }    // 此处的方法是和在布局中给按钮们设定的onclick属性对应的
    // 点完那些按钮后,执行该方法
    public void click(View v) {        // 现获取按钮上的内容
        String btn_text = ((Button) v).getText().toString();        // 通过getId可以获取被点的按钮的id,和我们设定的id比照
        switch (v.getId()) {
                case R.id.b0:        
                case R.id.b1:       
                 case R.id.b2:       
                  case R.id.b3:        
                  case R.id.b4:        
                  case R.id.b5:        
                  case R.id.b6:        
                  case R.id.b7:        
                  case R.id.b8:        
                  case R.id.b9:            // 检测上一次输入的是什么,如果是数字,就连接显示,如果是运算符,清空输入框,
            // 开始新的数字的显示
            if (status == 0) {                // 检测当前输入框中是否仅有0,如果仅有零,就将当前内容替换为输入的数字
                // 如果不是仅有0,则将当前按下的数字,连接到当前内容的最后
                if (onlyZero())
                    current = btn_text;                else
                    current += btn_text;                // 把当前状态置为0,表示刚刚输入的是数字
                status = 0;
            } else if (status == 1) {
                current = btn_text;
            }            
            break;        // 如果按下了加号
        case R.id.b_add:       
         case R.id.b_sub:        
        case R.id.b_multi:        
        case R.id.b_div:       
         case R.id.b_sqrt:       
          case R.id.b_rev:        
          case R.id.b_per:            // 把当前状态置为1,表示刚刚输入的是符号
            status = 1;            // 把当前输入框的内容,作为之前输入的内容保存在prev中
            prev = current;            // 保存当前运算符号
            com = btn_text;            break;
            case R.id.b_equal:
            compute();          
              break;      
                case R.id.b_c:
            clearAll();       
                 break;       
            case R.id.b_ce:
            clearPart();     
                break;     
             case R.id.b_back:
            clearSingle();    
            break;      
             case R.id.b_dot:
            addDot();    
            break;     
            case R.id.b_sign:
            addSign(); 
                       break;    
              case R.id.b_ms:
            Store();           
             break;       
              case R.id.b_mr:
            Out();            
            break;        
            case R.id.b_mp:
            addStore();            
            break;        
            case R.id.b_mc:
            clearIn();            
            break;
        }        // 更新输入框的当前内容
        update();

    }    /**
     * 按下等号后调用的方法,计算
     * 
     * @return 返回计算结果
     */
    private double compute() {        double old = Double.parseDouble(prev);        double cur = Double.parseDouble(current);

        Log.d("------获取的按钮文字-------", com);
                double result = 0;
        if (com.equals("+")) {
            result = old + cur;
        } else if (com.equals("-")) {
            result = old - cur;
        } else if (com.equals("*")) {
            result = old * cur;
        } else if (com.equals("/")) {            // 除数为0检测
            if (cur == 0) {
                warning();
            } else {
                result = old / cur;
            }
        } else if (com.equals("sqt")) {
            result = Math.sqrt(old);
        } else if (com.equals("1/x")) {
            result = 1 / old;
        } else if (com.equals("%")) {
            cur = (old*cur) / 100;
        } else if (com.equals(""))            // 计算得到结果后,立刻更新输入框
            prev = current;

        current = result + "";
        update();        return result;
    }    /**
     * 清理之前和当前的数据
     */
    private void clearAll() {
        prev = "";
        current = "";
        com = "";
        status = 0;
    }    private void clearPart() {
        current = "";
    }    private void clearSingle() {
            if (current.length() > 1) {
            current = current.substring(0, current.length() - 1);
        } else {
            current = "0";
        }
        result.setText(current);
    }    private void Store() {
        num = current ;
    }    private void addStore() {
         
         double cur = Double.parseDouble(current);
         double n = Double.parseDouble(num);
        n += cur;
        num = String.valueOf(n);
    }    private void Out() {
        current = num ;
    }    private void clearIn() {
        num = "";
    }    private void addDot() {
            if (current.indexOf(".") != -1) {
            current = "";
        } else {
            current = current + ".";
        }
    }    private void addSign() {
            if (current.indexOf("-") != -1) {
            current = current.replace(‘-‘, ‘ ‘);
        } else {
            current = "-" + current;
        }
    }    // 更新输入框内容
    public void update() {
        result.setText(current);
    }    public void warning() {
        Toast.makeText(MainActivity.this, "除数不能为零", 0).show();
    }    /**
     * 检测当前输入的内容是否仅仅是0
     * 
     * @return 如果只有零,返回true,否则false
     */
    public boolean onlyZero() {
            return current.length() == 1 && current.equals("0");
    }
}

BuildConfig.Java

/** Automatically generated file. DO NOT MODIFY */
package com.shiyifei.calc;
public final class BuildConfig {
    public final static boolean DEBUG = true;
}

R.java

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */package com.shiyifei.calc;public final class R {
    public static final class attr {
    }    public static final class dimen {
        /**  Default screen margins, per the Android Design guidelines. 

         Customize dimensions originally defined in res/values/dimens.xml (such as
         screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.

         */
        public static final int activity_horizontal_margin=0x7f040000;        public static final int activity_vertical_margin=0x7f040001;
    }    public static final class drawable {
        public static final int ic_launcher=0x7f020000;
                public static final int ic_launcher_calc=0x7f020001;
    }    public static final class id {
        public static final int LinearLayout1=0x7f080000;
                public static final int action_settings=0x7f080023;        public static final int b0=0x7f08001e;        public static final int b1=0x7f080017;        public static final int b2=0x7f080018;        public static final int b3=0x7f080019;        public static final int b4=0x7f080010;        public static final int b5=0x7f080011;        public static final int b6=0x7f080012;        public static final int b7=0x7f080009;        public static final int b8=0x7f08000a;        public static final int b9=0x7f08000b;        public static final int b_add=0x7f080021;        public static final int b_back=0x7f080004;        public static final int b_c=0x7f080006;        public static final int b_ce=0x7f080005;        public static final int b_div=0x7f08000c;        public static final int b_dot=0x7f080020;        public static final int b_equal=0x7f080022;
         public static final int b_mc=0x7f080008;
        public static final int b_mp=0x7f08001d;
        public static final int b_mr=0x7f08000f;
        public static final int b_ms=0x7f080016;
                public static final int b_multi=0x7f080013;
     public static final int b_per=0x7f080014;        public static final int b_rev=0x7f08001b;        public static final int b_sign=0x7f08001f;        public static final int b_sqrt=0x7f08000d;        public static final int b_sub=0x7f08001a;        public static final int editText1=0x7f080001;        public static final int r1=0x7f080002;        public static final int r2=0x7f080007;        public static final int r3=0x7f08000e;        public static final int r4=0x7f080015;        public static final int r5=0x7f08001c;        public static final int textView1=0x7f080003;
    }    public static final class layout {
        public static final int activity_main=0x7f030000;
    }    public static final class menu {
        public static final int main=0x7f070000;
    }    public static final class string {
        public static final int action_settings=0x7f050001;
                public static final int app_name=0x7f050000;
           public static final int hello_world=0x7f050002;
    }    public static final class style {
        /** 
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.

            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.

        Base application theme for API 11+. This theme completely replaces
        AppBaseTheme from res/values/styles.xml on API 11+ devices.

 API 11 theme customizations can go here. 

        Base application theme for API 14+. This theme completely replaces
        AppBaseTheme from BOTH res/values/styles.xml and
        res/values-v11/styles.xml on API 14+ devices.

 API 14 theme customizations can go here. 
         */
        public static final int AppBaseTheme=0x7f060000;
                /**  Application theme. 
 All customizations that are NOT specific to a particular API-level can go here. 
         */
        public static final int AppTheme=0x7f060001;
    }
}
时间: 2024-08-11 20:18:44

2016移动开发校赛之Android实践的相关文章

[BNUZOJ1261][ACM][2016北理校赛]方块消除(栈,字符串)

玩过方块消除游戏吗?现在规定当有两个或两个以上相邻且颜色相同的方块在一起的时候,它们就会产生消除反应.当存在多个消除反应同时产生时,最下的反应先执行.现在只给你其中一列,求最后剩下的方块结果. 输入要求 第一行是一个整数T(T<=100),表示有T组测试数据.每组测试数据一行.每行有一串数字(数字长度<=1,000,000),按从下往上给出一列方块的颜色(颜色用0-9表示,每个数字代表一种颜色).(数字长度大于100,000的不超过5组) 输出要求 输出消除后的结果. 测试数据示例 输入 21

【题解】2016.5.8SWJTU校赛题解

这套题目总体而言,中等题偏多,而简单题和难题较少.一些题目需要组合运用多种算法和数据结构,而代码复杂度并不高,主要目的使是选手在整个比赛过程中不至于进入"垃圾时间",能感受到思考并解决题目的乐趣--但好像大家都跳进坑里面了. A:Tickets 寻找最少花费及购买方式,若有多种则输出最前一种,直接处理即可,注意数据较大,用cin,cout可能会超时,这点在宣讲会上已经提过了. B:Wave string 定义了波浪串,要求寻找从某位开始的波浪长度为L的波浪串个数,用manacher求出

Android 实践项目开发 总结

  Android 实践项目开发 总结 课程:移动平台应用开发实践  班级:201592  姓名:杨凤  学号:20159213 成绩:___________       指导老师:娄嘉鹏          实验日期 :2015.12.06. 实验名称:                   android 百度地图开发 实验目的与要求: 1.实现定位 2.查询公交路线       3.目的地查询 实验目的: 在这次的项目开发中,我做的软件主要功能是调用百度地图的接口,实现定位.查询公交路线 和查

2016 年宁波工程学院第七届ACM校赛题解报告

2016 年宁波工程学院第七届ACM校赛题解报告 本题解代码直接为比赛代码,仅供参考. A,B,C,D,G,H,J,K,L,M 来自 Ticsmtc 同学. F 来自 Gealo 同学. E,I 来自Alex 学长. Promblem A :    Two Sum 时间限制: 1 Sec  内存限制: 64 MB 题目描述: 给出n个数,另外给出?个整数S,判断是否可以从中取出2个数,使得这两个数的和是S. 输入: 第?行有个整数T(1 <= T <= 10),代表数据组数. 对于每组数据,第

2016 华科校赛 B. And

// 2016 华科校赛 B. And http://acm.hust.edu.cn/problem/show/1672 题目描述 给出 a[1], ..., a[n].查询 t[1], ... t[m],问有多少 a[] 的子序列的按位与是 t[]. 输入 多组测试,EOF 结束. n a[] m t[] 1 ≤ n ≤ 1e6 1 ≤ m ≤ (1 << 20) 1 ≤ a[i] ≤ (1 << 20) 1 ≤ t[i] ≤ (1 << 20) 输出 输出一行,每组

2016 SCNUCPC 校赛非官方题解

我要举报本次校赛出题人的消极出题!!! A. 树链剖分数据结构板题 B. The background of water problem 题目大意(大写加粗的水题):给定$N$个学生和他们$K$个科目的成绩$S_i$,再给出各科目$K_i$的权重顺序$Q_i$,求排名之后,拥有id为$X$的是哪个学生. 基本思路:虽然$K$只有$10$,$S$只有$100$,但有M组查询,所以当然不能开个long long去hash每个学生.我们简单点,开个结构体,排个序,就好了. 参考代码: 官方代码(将成绩

android 实践项目四

android 实践项目四 本周主要是开发android baidumap实现公交的查询 1.权限的取得和对屏幕的支持 1 <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" > 2 </uses-permission> 3 <uses-permission android:name="android.permission.ACCESS_NETWORK

Android实践项目汇报

Android实践项目:推箱子 推箱子是一款来自日本的古老游戏,其设计目的是训练人的逻辑思维能力.游戏场景一般是设定在空间狭小的仓库中,要求把箱子摆放到指定位置.这就要求玩家巧妙的运用有限的空间和通道,合理的安排箱子的位置和移动次序才可能完成任务. 随着计算机游戏的发展,很多编程爱好者基于该游戏的思想开发了出各种版本.各种类型的推箱子.这其中也包括很多手机版本的实现,伴随着手机与计算机的普及,很快推箱子游戏便进入了千家万户. 一.需求分析: 2.1 功能需求 在游戏开发之前,首先需要对游戏所应该

做后台开发用到的技能都在这儿——《后台开发:核心技术与应用实践》

大多数面向对象语言没有指针的概念,C语言也没有对象的概念,同时具有指针和对象的C++语言在学习时有高昂的门槛,同时在服务端后台开发.处理多并发的海量网络请求等方面有天然的优势.就像Android开发对性能要求比较高的地图.视频.即时通讯由NDK开发一样,当网络应用的用户量. 并发量迅速增长,达到一定量级之后,后端服务的技术架构都会适用于自己玩玩的JavaScript(Bmob云端代码).适用于小规模网站的PHP和适用于中等规模网站的Java转变为Linux C++. 徐老师的<后台开发:核心技术