Android计算器尝试
学了一段时间Android了,一直都是在看,没有什么尝试,刚好最近大致学会了gridview配合simpleadpter的使用,于是想着动手练习一下,就选择了写一个最简单的计算器来实现。
只包含+-*/四种最基本的运算,不过即使是这么简单的小程序也搞了大半天才搞定。也是因为第一次写的时候比较随意,没有画流程图,方法也封装的好,结果后来优化调试的时候特别难受,最后一怒之下删除重新来过,这次注重了整体流程的把握和方法的封装写起来思路清晰了很多,不一会就调试实现了预期的功能,可以说是一次不错的尝试吧!
所以总结就是以后写代码之前尽量先画流程图,然后要注意代码规范和封装,避免文不加点出现过长的方法。
下面是Mainactivity的代码
[code name=java]
package com.fantasy.calculator;
import java.util.ArrayList;
import java.util.HashMap;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
public class MainActivity extends Activity implements OnItemClickListener {
private GridView gv; //键盘
private TextView display; //屏幕
private float a, b, sum = 0; //a,b,为两个运算数,sum为运算结果
private int operator = 0; //运算种类标志符
private int equalFlag=0; //按“=”次数标志
String sa = "", temp = ""; //用于接收输入的字符串
/*
* 主界面的图片资源
*/
int[] image = { R.drawable.number7, R.drawable.number8, R.drawable.number9,
R.drawable.division, R.drawable.number4, R.drawable.number5,
R.drawable.number6, R.drawable.multiply, R.drawable.number1,
R.drawable.number2, R.drawable.number3, R.drawable.minus,
R.drawable.number0, R.drawable.dot, R.drawable.equals,
R.drawable.add, R.drawable.clear, R.drawable.off };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display = (TextView) findViewById(R.id.textView1);
gv = (GridView) findViewById(R.id.gridView1);
gv.setAdapter(getAdapter(image));
gv.setOnItemClickListener(this);
}
/*
* 为int[]res获取适配的simpleadapter
*/
private SimpleAdapter getAdapter(int[] res) {
ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < res.length; i++) {
HashMap<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put("button", res[i]);
data.add(hashMap);
}
SimpleAdapter myAdapter = new SimpleAdapter(this, data,
R.layout.buttonitem, new String[] { "button" },
new int[] { R.id.ib_keyboard });
return myAdapter;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
// 如果按下的是数字键则用temp接收并显示
if (position != 3 && position != 7 && position != 11 && position != 15
&& position != 14 && position != 16 && position != 17) {
temp = getResources().getStringArray(R.array.text)[position];
sa += temp;
b = Float.parseFloat(sa);
display.setText(sa);
}
/*
* 按下运算符和功能键的处理逻辑
*/
switch (position) {
case 3:// 除号按下
equalFlag = 0;
display.setText("\\");
//dividePressed();
operatorPressed(4);
break;
case 7:// 乘号按下
equalFlag = 0;
display.setText("*");
//multiplyPressed();
operatorPressed(3);
break;
case 11:// 减号按下
equalFlag = 0;
display.setText("-");
//subPressed();
operatorPressed(2);
break;
case 15:// 加号按下
equalFlag = 0;
display.setText("+");
//addPressed();
operatorPressed(1);
break;
case 14: // 等号按下
equalFlag++;
showResult();
break;
case 16: // clear按下
clear();
break;
case 17: // 退出按下
this.finish();
break;
default:
break;
}
}
private void addPressed() { //加号按下处理逻辑
// TODO Auto-generated method stub
if (a == 0) {
a = b;
b = 0;
sa = "";
temp = "";
operator = 1;
} else if (operator != 1) {
showResult();
a=sum;
operator = 1;
} else if (operator == 1) {
showResult();
a = sum;
}
}
private void subPressed() {
// TODO Auto-generated method stub
if (a == 0) {
a = b;
b = 0;
sa = "";
temp = "";
operator = 2;
} else if (operator != 2) {
showResult();
a=sum;
operator = 2;
} else if (operator == 2) {
showResult();
a = sum;
}
}
private void multiplyPressed() {
// TODO Auto-generated method stub
if (a == 0) {
a = b;
b = 0;
sa = "";
temp = "";
operator = 3;
} else if (operator != 3) {
showResult();
a=sum;
operator=3;
} else if (operator == 3) {
showResult();
a = sum;
}
}
private void dividePressed() {
// TODO Auto-generated method stub
if (a == 0) {
a = b;
b = 0;
sa = "";
temp = "";
operator = 4;
} else if (operator != 4) {
showResult();
a=sum;
operator = 4;
} else if (operator == 4) {
showResult();
a = sum;
}
}
private void operatorPressed(int sign) {
// TODO Auto-generated method stub
if (a == 0) {
a = b;
b = 0;
sa = "";
temp = "";
operator = sign;
} else if (operator != sign) {
showResult();
a=sum;
operator = sign;
} else if (operator == sign) {
showResult();
a = sum;
}
}
private void showResult() {
// TODO Auto-generated method stub
switch (operator) { //判断运算种类
case 4: //如果是除法
if (equalFlag <= 1) { //如果是第一次按等号 下同
sum = divide(a, b);
display.setText(a+"\\"+b+"="+sum );
sa = "";
temp = "";
} else if (equalFlag >= 2) { //如果是连续按等号 下同
a=sum;
sum = divide(a, b);
display.setText(a+"\\"+b+"="+sum );
}
break;
case 3:
if (equalFlag <= 1) {
sum = multiply(a, b);
display.setText(a+"*"+b+"="+sum );
sa = "";
temp = "";
} else if (equalFlag >= 2) {
a=sum;
sum = multiply(a, b);
display.setText(a+"*"+b+"="+sum );
}
break;
case 2:
if (equalFlag <= 1) {
sum = sub(a, b);
display.setText(a+"-"+b+"="+sum );
sa = "";
temp = "";
} else if (equalFlag >= 2) {
a=sum;
sum = sub(a, b);
display.setText(a+"-"+b+"="+sum );
}
break;
case 1:
if (equalFlag <= 1) {
sum = add(a, b);
display.setText(a+"+"+b+"="+sum );
sa = "";
temp = "";
} else if (equalFlag >= 2) {
a=sum;
sum = add(a, b);
display.setText(a+"+"+b+"="+sum );
}
break;
default:
break;
}
}
// 清空屏幕和缓存
private void clear() {
// TODO Auto-generated method stub
a = b = sum = 0;
operator = 0;
equalFlag=0;
sa = "";
display.setText("");
}
// 加法
private float add(float x, float y) {
return x + y;
}
// 减法
private float sub(float x, float y) {
return x - y;
}
// 乘法
private float multiply(float x, float y) {
return x * y;
}
// 除法
private float divide(float x, float y) {
if (y != 0) {
return (x / y);
} else {
return Float.NaN;
}
}
}
[/code]
Android计算器尝试的更多相关文章
- Android计算器简单逻辑实现
Android计算器简单逻辑实现 引言: 我的android计算器的实现方式是:按钮输入一次,就处理一次. 但是如果你学过数据结构(栈),就可以使用表达式解析(前缀,后缀)处理. 而这个方式已经很成熟 ...
- Android计算器布局
Android(安桌)计算器布局实现 ——解决整个屏幕方案 引言: 学完了android布局的几种方式,做了一个android计算器. 我在网上搜索了这方面的资料,发现了布局都 ...
- java实现可有括号的android计算器
写了一个android版的计算器,可以计算带括号的表达式,不过前提是:正确的表达式才行 小缺陷是没有做表达式括号的控制,现在还没有想到好的控制方式 package javaAdvanced; impo ...
- Android计算器开发实例
Android简单计算器开发实例如图: ==================================================== activity_main.xml 代码如下: < ...
- 结对实验报告-android计算器设计
一:引言 目前手机可以说是普及率非常高的电子设备了,由于其便于携带,使用方便,资费适中等等原因,现在手机已经在一定程度开始代替固定电话的通话功能,以及一些原来电脑软件上的功能了.手机上的软件也随着 ...
- Android——计算器
layout文件: <?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:andr ...
- android计算器
一:引言 目前手机可以说是普及率非常高的电子设备了,由于其便于携带,使用方便,资费适中等等原因,现在手机已经在一定程度开始代替固定电话的通话功能,以及一些原来电脑软件上的功能了.手机上的软件也随 ...
- 【Android实验】UI设计-Android计算器
目录 实验目的 实验要求 实验过程 1. 界面设计 2. 功能设计 3. 运算处理 实验目的 自主完成一个简单APP的设计工作,综合应用已经学到的Android UI设计技巧,重点注意合理使用布局 实 ...
- Android 计算器
首先在activity_main.xml加入一个EditText 通过xml的方式来沈成一个图像在drawable中新建一个white_bg.xml文件,同时选择一个shape标签corners设置圆 ...
随机推荐
- Docker实践,来自沪江、滴滴、蘑菇街架构师的交流分享
架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 第一期主题:容器实践.Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是CI/CD,DevOps,微服务的重要 ...
- Student elective system (VF)
博客插N+文件有些麻烦,索性PDF上传到百度文库 点击获取<数据库系统原理与应用>也有相应的word版本 word版加密密码:(博客链接加密后) 六.附录 数据库设计的基本步骤,按照规范设 ...
- 如何判断Javascript对象是否存在
Javascript语言的设计不够严谨,很多地方一不小心就会出错. 举例来说,请考虑以下情况. 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明.用自然语言描述的算法如下: ...
- it转行了
国庆节后毅然的辞职了,辞职的还发生一些不愉快的事情,原来希望好去好来却不慌而散.接着便开始找工作,有过工作经验,找工作是容易些,不像刚毕业那会什么企业都没人要.因为实在是对it没感觉,所以找的都是销售 ...
- 学习PYTHON之路, DAY 8 - PYTHON 基础 8 (面向对象进阶)
类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的 ...
- 三、最小化的Spring XML配置
Spring 提供了自动装配(自动识别如何装配Bean的依赖关系)和自动检测(检测哪些类需要被配置成Spring Bean) 1.自动装配Bean的属性 1.1四种类型得自动装配:byName.byT ...
- c#解压文件
今天做了一个异步上传文件后再直接解压的一个东西.到解压这找了好多资料,做了1个多小时,贴出来,给自己张张记性. HttpPostedFileBase imgFile = Request.Files[0 ...
- 【转】一种解决h5页面背景音乐不能自动播放的方案
原文:http://www.cnblogs.com/wmhuang/p/5452259.html --------------------------------------------------- ...
- iOS -初识UIKit
UIKit框架:UI界面上每一个元素都是一个对象 一张图片是UIimageView对象 一段文字是一个UILabei对象 一个按钮是一个UIButton对象 搭建UI界面的步骤 利用类创建对象 将对象 ...
- iPhone / iPad UI界面设计与图标设计的尺寸设计规范+安卓+网页
①iPhone的设计尺寸 iPhone界面尺寸: 设备 分辨率 状态栏高度 导航栏高度 标签栏(工具栏)高度 iPhone6 plus设计版 1242 × 2208 60px 132px 146px ...