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
0
投稿
猜你喜欢
- MyBatis核心配置文件<?xml version="1.0" encoding="UTF-8&quo
- 本文实例为大家分享了用javaMail实现发送邮件的具体代码,供大家参考,具体内容如下通过javamail发送邮件,代码如下:导入maven
- 本文实例讲述了Spring实战之注入集合值操作。分享给大家供大家参考,具体如下:一 配置<?xml version="1.0
- Android超清晰6.0权限申请AndPermission的具体实现代码,供大家参考,具体内容如下前言这是我经常使用的框架,原因:1.思路
- 前言Spring 提供了 ApplicationContext 事件机制,可以发布和监听事件,这个特性非常有用。Spring 内置了一些事件
- 前置知识在微服务项目中,如果我们想实现服务间调用,一般会选择Feign。之前介绍过一款HTTP客户端工具Retrofit,配合SpringB
- 本文实例讲述了C#实现XSL转换的方法。分享给大家供大家参考,具体如下:xsl 可方便的将一种格式的xml,转换成另一种格式的xml,参考下
- 很多童鞋反应在吧项目导入到eclipse(myeclipse)时中文会有乱码,修改了编码格式后还是乱码,这里给大家介绍一下关于中文乱码时修改
- 1、什么是 ThreadLocal:ThreadLocal,即线程本地变量,如果你创建了一个变量,那么访问这个变量的每个线程都会有这个变量的
- 封装:就是把一些属性和方法封装到一个类里。 继承:就如子类继承父类的一些属性和方法。 多态:就如一个父类有多个不同特色的子类。 这里我就不多
- 一.线程池简介线程池的概念线程池就是首先创建一些线程,它们的集合称为线程池,使用线程池可以很好的提高性能,线程池在系统启动时既创建大量空闲的
- 被kafka-client和springkafka版本坑上周刚刚欢天喜地的在linux上部了kafka,这周打算用spring-boot框架
- 序列化一般应用与以下场景之中:1.永久性保存对象,把对象通过序列化字节流保存到本地文件中;2.通过序列化在网络中传输对象3.通过序列化在进程
- 定义:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。特
- 本文主要为大家分享了MyEclipse中安装使用Maven的方法,供大家参考,具体内容如下Step1:下载mavenhttp://maven
- 我们知道,在java中,将一个非原型类型类型的对象引用,赋值给另一个对象的引用之后,这两个引用就指向了同一个对象,如:public clas
- 前言在我们公司里,不同的服务之间通过Feign进行远程调用,但是,我们在尝试使调用可重试时遇到了一个小问题,Feign框架本身可以配置的自己
- 前提最近发现各个频道推荐了很多ULID相关文章,这里对ULID的规范文件进行解读,并且基于Java语言自行实现ULID,通过此实现过程展示U
- java模拟银行ATM机操作(基础版),供大家参考,具体内容如下实现的功能需求:修改密码之后,就会自动退出登录,再重新登录,若登录成功才能验
- 本文实例讲述了Java实现的傅里叶变化算法。分享给大家供大家参考,具体如下:用JAVA实现傅里叶变化 结果为复数形式 a+bi废话不多说,实