`

Android App 入门练手 简单的计算器

阅读更多

 

中间有负数运算的时候有些bug,  时间紧迫,算法问题有待后期完善,  



 

 

package com.lw.calc;

import java.math.BigDecimal;
import java.math.RoundingMode;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

/***
 * 我的计算器
 * @author david.li
 * @version 1.0
 * create date : 20140905
 */
public class CALCActivity extends Activity {
	
	private static final String NUM_0 = "0";
	private static final String NUM_MAX = "∞";
	private static final String NUM_MIN = "-∞";

	private EditText text;
	private EditText calc_text;
	
	private Button btn_no0;
	private Button btn_no1;
	private Button btn_no2;
	private Button btn_no3;
	private Button btn_no4;
	private Button btn_no5;
	private Button btn_no6;
	private Button btn_no7;
	private Button btn_no8;
	private Button btn_no9;

	private Button btn_add;
	private Button btn_sub;
	private Button btn_mul;
	private Button btn_div;
	private Button btn_pot;
	private Button btn_clr;
	private Button btn_del;
	private Button btn_equ;

	private OnClickListener listener_no0;
	private OnClickListener listener_no1;
	private OnClickListener listener_no2;
	private OnClickListener listener_no3;
	private OnClickListener listener_no4;
	private OnClickListener listener_no5;
	private OnClickListener listener_no6;
	private OnClickListener listener_no7;
	private OnClickListener listener_no8;
	private OnClickListener listener_no9;

	private OnClickListener listener_btn_add;
	private OnClickListener listener_btn_sub;
	private OnClickListener listener_btn_mul;
	private OnClickListener listener_btn_div;
	private OnClickListener listener_btn_pot;
	private OnClickListener listener_btn_clr;
	private OnClickListener listener_btn_del;
	private OnClickListener listener_btn_equ;
	
	public enum CALC_TYPE {
		ADD("add", 1),
		SUB("sub", 2),
		MUL("mul", 3),
		DIV("div", 4);

		private String name;
		private int value;
		
		private CALC_TYPE(String name, int value) {
			this.name = name;
			this.value = value;
		}
		
		@Override
		public String toString() {
			return this.name;
		}
		
	}
	
	
    /***
     * 创建打开我的计算器窗体
     * 1、获取窗口控件
     * 2、实现每一个控件的点击事件监听(处理操作过程)
     * 3、将事件监听附加到对应的窗体控件上
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setTitle("David 计算器");  
        
        /***
         * 获取每一个窗体控件
         */
        text = (EditText)findViewById(R.id.text);
        text.setText(NUM_0);
        calc_text = (EditText)findViewById(R.id.calc_text);

        btn_no0 = (Button)findViewById(R.id.btn_no0);
        btn_no1 = (Button)findViewById(R.id.btn_no1);
        btn_no2 = (Button)findViewById(R.id.btn_no2);
        btn_no3 = (Button)findViewById(R.id.btn_no3);
        btn_no4 = (Button)findViewById(R.id.btn_no4);
        btn_no5 = (Button)findViewById(R.id.btn_no5);
        btn_no6 = (Button)findViewById(R.id.btn_no6);
        btn_no7 = (Button)findViewById(R.id.btn_no7);
        btn_no8 = (Button)findViewById(R.id.btn_no8);
        btn_no9 = (Button)findViewById(R.id.btn_no9);

        btn_add = (Button)findViewById(R.id.btn_add);
        btn_sub = (Button)findViewById(R.id.btn_sub);
        btn_mul = (Button)findViewById(R.id.btn_mul);
        btn_div = (Button)findViewById(R.id.btn_div);
        btn_pot = (Button)findViewById(R.id.btn_pot);
        btn_clr = (Button)findViewById(R.id.btn_clr);
        btn_del = (Button)findViewById(R.id.btn_del);
        btn_equ = (Button)findViewById(R.id.btn_equ);
        
        
        /***
         * 实现每一个控件的点击事件监听(处理操作过程)
         */
        listener_no0 = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(reInput(num_now)) {
					num_now = NUM_0;
				} else {
					num_now += NUM_0;
				}
				text.setText(num_now);
			}
		};
        listener_no1 = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(reInput(num_now)) {
					num_now = "1";
				} else {
					num_now += "1";
				}
				text.setText(num_now);
			}
		};
        listener_no2 = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(reInput(num_now)) {
					num_now = "2";
				} else {
					num_now += "2";
				}
				text.setText(num_now);
			}
		};
        listener_no3 = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(reInput(num_now)) {
					num_now = "3";
				} else {
					num_now += "3";
				}
				text.setText(num_now);
			}
		};
        listener_no4 = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(reInput(num_now)) {
					num_now = "4";
				} else {
					num_now += "4";
				}
				text.setText(num_now);
			}
		};
        listener_no5 = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(reInput(num_now)) {
					num_now = "5";
				} else {
					num_now += "5";
				}
				text.setText(num_now);
			}
		};
        listener_no6 = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(reInput(num_now)) {
					num_now = "6";
				} else {
					num_now += "6";
				}
				text.setText(num_now);
			}
		};
        listener_no7 = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(reInput(num_now)) {
					num_now = "7";
				} else {
					num_now += "7";
				}
				text.setText(num_now);
			}
		};
        listener_no8 = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(reInput(num_now)) {
					num_now = "8";
				} else {
					num_now += "8";
				}
				text.setText(num_now);
			}
		};
        listener_no9 = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(reInput(num_now)) {
					num_now = "9";
				} else {
					num_now += "9";
				}

				text.setText(num_now);
			}
		};

		listener_btn_pot = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(num_now.indexOf(".") == -1) {
					num_now += ".";
				}
				text.setText(num_now);
			}
		};
		listener_btn_add = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(num_now.endsWith("+")
					|| num_now.endsWith("-")
					|| num_now.endsWith("x")
					|| num_now.endsWith("÷")) {
					num_now = num_now.substring(0, num_now.length() - 1); 
				}
				text.setText(num_now + "+");
			}
		};
		listener_btn_sub = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(num_now.endsWith("+")
						|| num_now.endsWith("-")
						|| num_now.endsWith("x")
						|| num_now.endsWith("÷")) {
						num_now = num_now.substring(0, num_now.length() - 1); 
					}
				text.setText(num_now + "-");
			}
		};
		listener_btn_mul = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(num_now.endsWith("+")
						|| num_now.endsWith("-")
						|| num_now.endsWith("x")
						|| num_now.endsWith("÷")) {
						num_now = num_now.substring(0, num_now.length() - 1); 
					}
				text.setText(num_now + "x");
			}
		};
		listener_btn_div = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(num_now.endsWith("+")
						|| num_now.endsWith("-")
						|| num_now.endsWith("x")
						|| num_now.endsWith("÷")) {
						num_now = num_now.substring(0, num_now.length() - 1); 
					}
				text.setText(num_now + "÷");
			}
		};
		listener_btn_clr = new OnClickListener() {
			public void onClick(View v) {
				text.setText(NUM_0);
				calc_text.setText("");
			}
		};
		listener_btn_del = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();
				if(!NUM_0.equals(num_now)) {
					if(num_now.length() > 1) {
						num_now = num_now.substring(0, num_now.length() - 1);
					} else {
						num_now = NUM_0;
					}
				}
				text.setText(num_now);
				if(NUM_0.equals(num_now)) {
					calc_text.setText("");
				}
			}
		};
		listener_btn_equ = new OnClickListener() {
			public void onClick(View v) {
				String num_now = text.getText().toString();

				if(num_now.endsWith("+") 
					|| num_now.endsWith("-")
					|| num_now.endsWith("x") 
					|| num_now.endsWith("÷")) {
					num_now = num_now.substring(0, num_now.length() - 1);
				}
				try {
					String num = calc(num_now);
					text.setText(num);
					calc_text.setText(num_now + "=");
				} catch (Exception e) {
				}
			}
		};

		/***
		 * 给数字按钮、运算操作添加点击事件监听
		 */
		// 数字按钮监听
		btn_no0.setOnClickListener(listener_no0);
		btn_no1.setOnClickListener(listener_no1);
		btn_no2.setOnClickListener(listener_no2);
		btn_no3.setOnClickListener(listener_no3);
		btn_no4.setOnClickListener(listener_no4);
		btn_no5.setOnClickListener(listener_no5);
		btn_no6.setOnClickListener(listener_no6);
		btn_no7.setOnClickListener(listener_no7);
		btn_no8.setOnClickListener(listener_no8);
		btn_no9.setOnClickListener(listener_no9);

		// 运算操作按钮监听
		btn_pot.setOnClickListener(listener_btn_pot);
		btn_add.setOnClickListener(listener_btn_add);
		btn_sub.setOnClickListener(listener_btn_sub);
		btn_mul.setOnClickListener(listener_btn_mul);
		btn_div.setOnClickListener(listener_btn_div);
		btn_clr.setOnClickListener(listener_btn_clr);
		btn_del.setOnClickListener(listener_btn_del);
		btn_equ.setOnClickListener(listener_btn_equ);
    }
    
    private String calc(String num) {
    	
    	if(num.indexOf(NUM_MAX) > -1) {
    		return NUM_MAX;
    	}
    	if(num.indexOf(NUM_MIN) > -1) {
    		return NUM_MIN;
    	}

    	boolean div_zero = false; // n÷0
		boolean zero_div = false; // 0÷n
		String[] array_add = num.split("\\+");
		BigDecimal bd = BigDecimal.ZERO;
		for(int i=0; i<array_add.length; i++) {
			if(array_add[i].indexOf("-") > -1
				||array_add[i].indexOf("x") > -1
				||array_add[i].indexOf("÷") > -1) {
				
				String[] array_sub = array_add[i].split("\\-");
				for(int j=0; j<array_sub.length; j++) {
					if(array_sub[j].indexOf("x") > -1
						||array_sub[j].indexOf("÷") > -1) {
						
						String[] array_div = array_sub[j].split("\\÷");
						BigDecimal sum_mul = BigDecimal.ONE;
						BigDecimal sum_div = BigDecimal.ONE;
						for(int k=0; k<array_div.length; k++) {
							if(array_div[k].indexOf("x") > -1) {
								
								String[] array_mul = array_div[k].split("x");
								for(int h=0; h<array_mul.length; h++) {
									if(k!=0 && h==0) {
										if(sum_mul.compareTo(BigDecimal.ZERO) == 0) {
											zero_div = true;
										}
										if("0".equals(array_mul[h])) {
											div_zero = true;
											sum_mul = sum_mul.divide(BigDecimal.ONE); // 用于计算结果的正负
										} else {
											sum_mul = sum_mul.divide(new BigDecimal(array_mul[h]), 10, RoundingMode.HALF_UP);
										}
									} else {
										sum_mul = sum_mul.multiply(new BigDecimal(array_mul[h]));
									}
								}
							} else {
								if(k==0) {
									sum_div = sum_div.multiply(new BigDecimal(array_div[k]));
								} else {
									if(sum_div.compareTo(BigDecimal.ZERO) == 0) {
										zero_div = true;
									}
									if(NUM_0.equals(array_div[k])) {
										div_zero = true;
										sum_div = sum_div.divide(BigDecimal.ONE); // 用于计算结果的正负
									} else {
										sum_div = sum_div.divide(new BigDecimal(array_div[k]), 10, RoundingMode.HALF_UP);
									}
								}
							}
						}
						if(j==0) {
							bd = bd.add(sum_mul.multiply(sum_div));
						} else {
							bd = bd.subtract(sum_mul.multiply(sum_div));
						}
					} else {
						if(j==0) {
							if("".equals(array_sub[j]) == false) {
								bd = bd.add(new BigDecimal(array_sub[j]));
							}
						} else {
							bd = bd.subtract(new BigDecimal(array_sub[j]));
						}
					}
				}
			} else {
				bd = bd.add(new BigDecimal(array_add[i]));
			}
		}
		
		String result = bd.toString();
		if(result.indexOf(".") > -1) {
			String[] ns = result.split("\\.");
			if(new BigDecimal(ns[1]).equals(BigDecimal.ZERO)) {
				result = ns[0];
			} else {
				String end = ns[1];
				int len = end.length();
				for(int i=0; i<len; i++) {
					if(end.endsWith("0")) {
						end = end.substring(0, end.length() - 1);
					}
				}
				result = ns[0] + "." + end;
			}
		}
		
		if(div_zero && bd.compareTo(BigDecimal.ZERO) >= 0) {
			result = NUM_MAX;
		} else if(div_zero && bd.compareTo(BigDecimal.ZERO) < 0) {
			result = NUM_MIN;
		}
		if(zero_div) {
			result = NUM_0;
		}
		if(zero_div && div_zero) {
			result = "NAN";
		}

    	return result;
    }
    
    private boolean reInput(String num_now) {
    	if(NUM_0.equals(num_now) || NUM_MAX.equals(num_now) || NUM_MIN.equals(num_now)) {
    		return true;
    	}
    	return false;
    }
    

}

 

 

源码查看附件:

  • 大小: 44.5 KB
0
1
分享到:
评论

相关推荐

    Android入门练手计算器

    Android小计算器,除实现四则运算还实现了括号乘方取余等高级运算,TextView滚动显示,输入时自动定位到最后一行,双击满屏显示,再次双击恢复。可检测表达式是否正确。更改了软件图标,app目录下有签名打包好的apk...

    Android APP + JAVA + 简易计算器 + 初学者开发

    在本项目中,我们关注的是一个适合初学者的Android应用程序开发案例——一个简易的计算器。这个项目使用了Java编程语言,并在Android Studio集成开发环境中进行构建。以下是对这个主题的详细解析: 1. **Android ...

    AndroidAPP开发入门教程.pdf

    Android APP 开发入门教程 Android APP 开发入门教程主要介绍了 Android APP 的开发流程,从 SDK 下载、开发环境搭建、代码编写、APP 打包等步骤一一讲解。本教程通过实践操作,带领读者一步步完成 Android APP 的...

    【android开发】Android APP开发入门教程Android APP开发入门教程

    【android开发】Android APP开发入门教程Android APP开发入门教程 说明:Android APP开发入门教程Android APP开发入门教程 (Android APP Development tutorialAndroid APP Development tutorial) 文件列表: Android ...

    android 计算器

    在Android平台上开发一个计算器应用是一项基础且重要的学习任务,它能帮助开发者熟悉Android Studio的使用,理解Android应用程序的基本架构和组件。在这个项目中,我们将会探讨一些关键的技术点,包括UI设计、事件...

    Android Studio开发一个计算器APP

    总结来说,"Android Studio开发一个计算器APP"是一个涉及Android编程基础、用户界面设计、事件处理、计算逻辑和应用发布的综合实践项目。通过这个项目,开发者不仅可以掌握Android应用开发的基本流程,还能提升对...

    简易计算器(Android)

    【简易计算器(Android)】项目是一个基础的移动应用开发实例,主要使用了Android平台和Java编程语言。这个项目旨在帮助初学者理解如何在Android环境中构建一个简单的计算器应用。以下是该项目涉及的主要知识点: 1...

    Android APP开发入门

    通过阅读“Android APP开发入门”这本书,初学者将能够系统地学习Android开发,逐步掌握Android Studio的使用技巧,理解Android应用的基本架构,并具备独立开发简单应用的能力。随着经验积累,开发者可以进一步深入...

    Android仿照苹果界面,手写的计算器

    【Android仿照苹果界面,手写的计算器】 在Android开发中,常常需要进行界面设计和功能实现,本项目就是一个初学者尝试模仿苹果iOS计算器界面而创建的Android应用。这个计算器不仅在外观上尽量接近苹果的风格,而且...

    Android App开发入门范例程序

    在Android App开发领域,入门是每个开发者必经的阶段。这个"Android App开发入门范例程序"集合提供了多个章节的学习材料,旨在帮助新手快速掌握Android应用的基础开发技能。以下是各个章节和FlagAPI部分可能涉及的...

    基于Java语言的Android APP设计练手项目源码

    该项目是一个以Java语言为开发基础,针对Android平台设计的练手应用程序源代码。项目包含83个文件,其中XML配置文件28个,PNG图片文件18个,Java源代码文件10个,WebP图片文件10个,Git忽略文件3个,Kotlin脚本文件3...

    小练手app源码

    【小练手app源码】是一个供学习和实践的移动应用源代码,它为开发者提供了一个平台,可以深入了解移动应用的开发流程和技术细节。在这个源码中,我们可以找到关于Android或iOS应用开发的关键元素,包括界面设计、...

    傻瓜式Android APP开发入门教程

    ### 傻瓜式Android APP开发入门教程 #### 一、准备工作 在开始Android应用程序的开发之前,我们需要准备一些基础的开发工具。本教程将详细介绍如何进行这些准备工作,并且假设读者具备一定的编程基础。 ##### 1. ...

    Android代码-安卓仿小米计算器APP

    【Android代码-安卓仿小米计算器APP】项目是一个用于学习和实践Android编程的示例,它模仿了小米手机上的计算器应用的界面和功能。这个项目主要涵盖了Android应用开发的基础知识,包括UI设计、事件处理、计算逻辑...

    Android APP开发入门教程

    Android APP开发入门教程 说明:Android APP开发入门教程Android APP开发入门教程 (Android APP Development tutorialAndroid APP Development tutorial) 文件列表: Android APP开发入门教程.pdf (586574, -06-14) ...

    Android APP开发入门:使用Android Studio环境 配套范例程序1-6章

    本资料是"Android APP开发入门:使用Android Studio环境 配套范例程序1-6章",涵盖了初学者需要了解的基本概念和实践操作,但由于文件大小限制,只包含了前六章的实例代码。 **第一章:环境搭建与Hello World** 在...

    基于Android Studio的简易计算器Android App设计源码

    该项目为基于Android Studio开发的简易计算器Android应用源码,包含51个文件,主要包括25个XML布局文件、10个图像文件、4个Java类文件以及相关的构建脚本和配置文件。该项目适合初学者练习Android开发,旨在通过实际...

Global site tag (gtag.js) - Google Analytics