Android Studio实现简易计算器App (Java语言版)
作者:lijin8080 发布时间:2023-08-02 01:05:39
标签:Android,Studio,计算器,App
本文实例为大家分享了Android Studio实现简易计算器App的具体代码,供大家参考,具体内容如下
效果演示
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:orientation="vertical">
<TextView
android:id="@+id/mini"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="40dp"
android:text=""
android:textDirection="rtl"/>
<TextView
android:id="@+id/max"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="100dp"
android:text=""
android:textDirection="rtl"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="%"
android:textSize="30dp"
android:onClick="surplus"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="CE"
android:textSize="30dp"
android:onClick="clearce"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="C"
android:textSize="30dp"
android:onClick="clearc"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="⇦"
android:textSize="30dp"
android:onClick="backsprce"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="1/x"
android:textSize="30dp"
android:onClick="reciprocal"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="x²"
android:textSize="30dp"
android:onClick="square"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="²√x"
android:textSize="30dp"
android:onClick="squareroot"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="÷"
android:textSize="60dp"
android:onClick="division"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="7"
android:textSize="30dp"
android:onClick="number_7"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="8"
android:textSize="30dp"
android:onClick="number_8"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="9"
android:textSize="30dp"
android:onClick="number_9"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="×"
android:textSize="30dp"
android:onClick="multiplication"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="4"
android:textSize="30dp"
android:onClick="number_4"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="5"
android:textSize="30dp"
android:onClick="number_5"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="6"
android:textSize="30dp"
android:onClick="number_6"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="-"
android:textSize="30dp"
android:onClick="subtraction"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="1"
android:textSize="30dp"
android:onClick="number_1"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="2"
android:textSize="30dp"
android:onClick="number_2"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="3"
android:textSize="30dp"
android:onClick="number_3"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="+"
android:textSize="30dp"
android:onClick="addition"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="±"
android:textSize="30dp"
android:onClick="change"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="0"
android:textSize="30dp"
android:onClick="number_0"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="."
android:textSize="30dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="="
android:textSize="30dp"
android:onClick="equal"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
Java文件
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
public class MainActivity extends Activity {
private TextView tv1;
private TextView tv2;
private StringBuilder viewStr;
private int index = 0;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_calc);
tv1 = (TextView) findViewById(R.id.mini);
tv2 = (TextView) findViewById(R.id.max);
viewStr = new StringBuilder();
index = 0;
}
//加减乘除、求余简单运算方法
public String calc(StringBuilder strB) {
String allS = strB.toString();
String[] asmd = {"+","-","×","÷","%"};
int x = 0; int y = 0;
String result = null;
for (int i = 0; i < 5; i ++) {
int inde = strB.indexOf(asmd[i]);
if (inde > 0) {
String a = allS.split(asmd[i])[0];
String b = allS.split(asmd[i])[1];
if (i == 0) {result = String.valueOf(Integer.parseInt(a) + Integer.parseInt(b));}
if (i == 1) {result = String.valueOf(Integer.parseInt(a) - Integer.parseInt(b));}
if (i == 2) {result = String.valueOf(Integer.parseInt(a) * Integer.parseInt(b));}
if (i == 3) {
if (Integer.parseInt(b) == 0) {
Toast.makeText(this,"0不能为除数",Toast.LENGTH_SHORT).show();
result = String.valueOf(Integer.parseInt(a));
}else {
result = String.valueOf(Integer.parseInt(a) / Integer.parseInt(b));
}
}
if (i == 4) {result = String.valueOf(Integer.parseInt(a) % Integer.parseInt(b));}
}
}
return result;
}
//数字按钮事件
public void number_0(View view) { viewStr.append("0"); index ++ ; tv2.setText(viewStr); }
public void number_1(View view) { viewStr.append("1"); index ++ ; tv2.setText(viewStr); }
public void number_2(View view) { viewStr.append("2"); index ++ ; tv2.setText(viewStr); }
public void number_3(View view) { viewStr.append("3"); index ++ ; tv2.setText(viewStr); }
public void number_4(View view) { viewStr.append("4"); index ++ ; tv2.setText(viewStr); }
public void number_5(View view) { viewStr.append("5"); index ++ ; tv2.setText(viewStr); }
public void number_6(View view) { viewStr.append("6"); index ++ ; tv2.setText(viewStr); }
public void number_7(View view) { viewStr.append("7"); index ++ ; tv2.setText(viewStr); }
public void number_8(View view) { viewStr.append("8"); index ++ ; tv2.setText(viewStr); }
public void number_9(View view) { viewStr.append("9"); index ++ ; tv2.setText(viewStr); }
//回退按钮事件
public void backsprce(View view) {
if (viewStr.length() == 0) return;
index = viewStr.length();
viewStr.deleteCharAt(--index); tv2.setText(viewStr);
}
//符号改变按钮事件
public void change(View view) {
String allS = viewStr.toString();
String[] asmd = {"+","-","×","÷","%"};
int inde = 0;
String a = null; //保存字符串中运算符部分
String b = null; //保存字符串中数字部分
for (int i = 0; i < 5; i ++) {
inde = viewStr.indexOf(asmd[i]);
if (inde != -1) {
a = asmd[i];
break;
}
}
//A 字符形 改变 A 正负值
if (inde == -1) {
clearc(view);
int c = - Integer.parseInt(allS);
viewStr.append(String.valueOf(c));
index = String.valueOf(c).length();
tv2.setText(viewStr);
}
//A + 字符串形 改变 A 正负值 暂时无法实现,待后续优化
if (inde == index - 1) {
return;
// clearc(view);
// int c = - Integer.valueOf(allS.split(a)[0]);
// viewStr.append(String.valueOf(c));
// index = String.valueOf(c).length();
// tv2.setText(viewStr);
}
//A + B 字符串形 改变 B 正负值
if (inde >= 0 && inde < index) {
clearc(view);
b = allS.split(a)[0];
int c = - Integer.parseInt(allS.split(a)[1]);
viewStr.append(b).append(a).append(String.valueOf(c));
index = String.valueOf(c).length();
tv2.setText(viewStr);
}
}
//清空按钮事件
public void clearc(View view) {
StringBuilder temp = new StringBuilder();
viewStr = temp.append("");
tv2.setText(viewStr);
index = 0;
}
public void clearce(View view) {
StringBuilder temp = new StringBuilder();
viewStr = temp.append("");
tv1.setText("");
tv2.setText(viewStr);
index = 0;
}
//等于按钮事件
public void equal(View view) {
String[] asmd = {"+","-","×","÷","%"};
StringBuilder temp = new StringBuilder();
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > 0 && inde != index-1) {
tv1.setText(calc(viewStr));
String a = calc(viewStr);
viewStr = temp.append(a);
tv2.setText(viewStr);
index = viewStr.length();
return;
}else if (inde > 0 && inde == index-1) {
viewStr.deleteCharAt(--index);
tv1.setText(viewStr);
tv2.setText(viewStr);
}
}
tv1.setText(viewStr);
tv2.setText(viewStr);
}
//加减乘除按钮事件
public void addition(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
StringBuilder temp = new StringBuilder();
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > 0 && viewStr.charAt(index-1) >= '0' && viewStr.charAt(index-1) <= '9') {
tv1.setText(calc(viewStr));
String a = calc(viewStr);
viewStr = temp.append(a).append('+');
tv2.setText(viewStr);
index = viewStr.length();
return;
}
}
char a = viewStr.charAt(index-1);
if (a == '+') { return; }
if (a == '-' || a == '×' || a == '÷' || a == '%') {
viewStr.setCharAt(index-1,'+');
}else {
viewStr.append("+");
index ++ ;
}
tv2.setText(viewStr);
}
public void subtraction(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
StringBuilder temp = new StringBuilder();
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > 0 && viewStr.charAt(index-1) >= '0' && viewStr.charAt(index-1) <= '9') {
tv1.setText(calc(viewStr));
String a = calc(viewStr);
viewStr = temp.append(a).append('-');
tv2.setText(viewStr);
index = viewStr.length();
return;
}
}
char a = viewStr.charAt(index-1);
if (a == '-') { return; }
if (a == '+' || a == '×' || a == '÷' || a == '%') {
viewStr.setCharAt(index-1,'-');
}else {
viewStr.append("-");
index ++ ;
}
tv2.setText(viewStr);
}
public void multiplication(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
StringBuilder temp = new StringBuilder();
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > 0 && viewStr.charAt(index-1) >= '0' && viewStr.charAt(index-1) <= '9') {
tv1.setText(calc(viewStr));
String a = calc(viewStr);
viewStr = temp.append(a).append('×');
tv2.setText(viewStr);
index = viewStr.length();
return;
}
}
char a = viewStr.charAt(index-1);
if (a == '×') { return; }
if (a == '+' || a == '-' || a == '÷' || a == '%') {
viewStr.setCharAt(index-1,'×');
}else {
viewStr.append("×");
index ++ ;
}
tv2.setText(viewStr);
}
public void division(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
StringBuilder temp = new StringBuilder();
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > 0 && viewStr.charAt(index-1) >= '0' && viewStr.charAt(index-1) <= '9') {
tv1.setText(calc(viewStr));
String a = calc(viewStr);
viewStr = temp.append(a).append('÷');
tv2.setText(viewStr);
index = viewStr.length();
return;
}
}
char a = viewStr.charAt(index-1);
if (a == '÷') { return; }
if (a == '+' || a == '-' || a == '×' || a == '%') {
viewStr.setCharAt(index-1,'÷');
}else {
viewStr.append("÷");
index ++ ;
}
tv2.setText(viewStr);
}
//求余按钮事件
public void surplus(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
StringBuilder temp = new StringBuilder();
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > 0 && viewStr.charAt(index-1) >= '0' && viewStr.charAt(index-1) <= '9') {
tv1.setText(calc(viewStr));
String a = calc(viewStr);
viewStr = temp.append(a).append('%');
tv2.setText(viewStr);
index = viewStr.length();
return;
}
}
char a = viewStr.charAt(index-1);
if (a == '%') { return; }
if (a == '+' || a == '-' || a == '×' || a == '÷') {
viewStr.setCharAt(index-1,'%');
}else {
viewStr.append("%");
index ++ ;
}
tv2.setText(viewStr);
}
//求倒数按钮事件
public void reciprocal(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > -1) { return; }
}
int a = Integer.parseInt(viewStr.toString().trim());
if (a == 0) {
Toast.makeText(this,"0不能为除数",Toast.LENGTH_SHORT).show();
return;
}
clearc(view);
viewStr.append(1/a);
index = String.valueOf(1/a).length();
tv2.setText(viewStr);
}
//平方按钮事件
public void square(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > -1) { return; }
}
int a = Integer.parseInt(viewStr.toString().trim());
clearc(view);
viewStr.append(a*a);
index = String.valueOf(a*a).length();
tv2.setText(viewStr);
}
//开平方按钮事件
public void squareroot(View view) {
if (viewStr.length() == 0) return;
String[] asmd = {"+","-","×","÷","%"};
for (int i = 0; i < 5; i ++) {
int inde = viewStr.indexOf(asmd[i]);
if (inde > -1) { return; }
}
int a = Integer.parseInt(viewStr.toString().trim());
clearc(view);
viewStr.append((int)Math.sqrt(a));
index = String.valueOf((int)Math.sqrt(a)).length();
tv2.setText(viewStr);
}
}
来源:https://blog.csdn.net/qq_44003983/article/details/115416189


猜你喜欢
- 前言安卓开发中一个很基础的操作就是打开一个 Activity ,另一个很必要的操作就是,打开一个 Activity ,在打开的 Activi
- Spring Expression Language (SpEL)是强大的表达式语言,支持查询、操作运行时对象图,以及解析逻辑、算术表达式。
- 一直以来,Java/Spring开发被认为是笨重的代表,无法快速生成项目原型和骨架。所以,Spring推出了Spring Roo这个项目,帮
- 1. 算法分析根据概率将奖品划分区间,每个区间代表一个奖品,然后抽取 随机数,反查落在那个区间上,即为所抽取的奖品。2. 代码核心
- Activator.CreateInstance和AssemblyCreateInstance性能测试using System;using
- 首先说明:如果没有进入调试模式的话,默认的调试窗口如下: 开始前的准备: 新建控制台程序DebugWindowDemo:修改Program.
- 背景:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了
- 开发环境: IDEA 2022.1.41. 概述虽然webservice这块使用很少,但在局域网作服务还是相当不错。今天突生想法,想做一个来
- Socket里面的协议解析是Socket通讯程序设计中最复杂的地方,如果你的应用层协议设计或实现不佳,Socket通讯中常见的粘包,分包就难
- FastDFS简介FastDFS是一款开源的轻量级分布式文件系统,使用C实现,支持Linux、BSD等unix-like操作系统。值得注意的
- 官方 JSON.NET 地址 http://james.newtonking.com/pages/json-net.aspxXML TO J
- 1 简介之前我们在文章《K8ssandra入门-详细记录在Linux上部署K8ssandra到Kubernetes》成功地在Ubuntu上安
- 前言在数据结构算法设计中,或者一个方法的具体实现的时候,有一种方法叫做“递归”,这种方法在思想上并不是特别难,但是实现起来还是有一些需要注意
- 对变量延迟初始化Kotlin语言有许多特性,包括变量不可变,变量不可为空,等等。这些特性都是为了尽可能地保证程序安全而设计的,但是有些时候这
- 本文实例为大家分享了C语言实现一个扫雷小游戏的具体代码,供大家参考,具体内容如下一、全部源码//棋盘大小#define ROW 9#defi
- 最近学习JavaFx,发现网上大概只有官方文档可以查阅,学习资料较少,写个拼图游戏供记录。。大概说一下思路:1.面板的构建:面板采用Grid
- 一、简介ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如:Task支持线程的
- CLR提供了可以区分类型的Equality 和Identity能力。Equality:如果两个对象是相同的类型,并且它们各自带有相同和等值的
- MyBatis源码解析_获取SqlSessionFactory我们都知道,在Mybatis中,对数据库的增删改查,实际上是由SqlSessi
- 本文实例讲述了Android编程ProgressBar自定义样式之动画模式实现方法。分享给大家供大家参考,具体如下:忘记在哪里看到的那位仁兄