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设置圆 ...
随机推荐
- 7 -- Spring的基本用法 -- 5...
7.5 Spring容器中的Bean 7.5.1 Bean的基本定义和Bean别名 <beans.../>元素是Spring配置文件的根元素,该元素可以指定如下属性: default-la ...
- sqlite数据库的使用helper
public class SQLiteHelper { //public static String ConnectionString = "Data Source= ...
- Mac +WebStorm+nodeJs+Freemarker.js的安装与使用
第一步用webStorm新建node+express项目 第二步执行npm i –save freemarker.js,安装 freemarker.js 模块 第三步安装java jdk包 jdk包地 ...
- MVC5+EF6 入门完整教程七
本篇我们针对表格显示添加一些新功能. 前面我们已经讲解过表格显示数据了,现在我们添加三个常用功能: 对显示结果进行排序.过滤.分页. 文章提纲 理论基础/前置准备 详细步骤 总结 前置准备 – 应用之 ...
- 用orb-slam2跑RGB-D Example中的TUM Dataset
链接在此:https://github.com/raulmur/ORB_SLAM2 1.按照要求下载数据集,我下载的是rgbd_dataset_freiburg2_pioneer_360,将其解压到你 ...
- java selenium (十一) 操作弹出对话框
Web 开发人员通常需要利用JavaScript弹出对话框来给用户一些信息提示, 包括以下几种类型 阅读目录 对话框类型 1. 警告框: 用于提示用户相关信息的验证结果, 错误或警告等 2. 提示框 ...
- Kettle6.0安装及问题总结-白痴教程
1.安装JDK 配置java环境变量 2.安装KETTLE: 官方下载地址:http://community.pentaho.com/projects/data-integration/ 下载完后,解 ...
- mac 安装mvn 失败
安装过程遇到2个问题 1.java版本不对 2.Error: JAVA_HOME is not defined correctly. We cannot execute $/usr/libexec/j ...
- 总结四条对学习Linux系统有帮助的方法
网络是一个很神奇的东西,现代人的生活离不开网络,网络已深入人们的工作,生活,娱乐等方方面面.网络之所以无处不在,是因为它提供了诸多的网络服务,所以网络服务是网络的灵魂. 互联网上的各种网络服务是架构在 ...
- MVB设备分类
连接在MVB上的设备按性能可以分为5类 MVB上的设备应具备下面六个性能中的一个或多个. MVB设备的性能 性能 说明 分类 设备状态 设备被轮询时能够发送出其设备状态 1,2,3,4,5 过程数据 ...