Android用java数组实现计算器的四则运算
来源:互联网 发布:班车软件 编辑:程序博客网 时间:2024/06/08 13:27
我的实现原理:
1.在安卓上显示数字键盘不能用EditView这个组件,因为这个组件会召唤出小键盘,反人类设计,所以说数字都要用button写,显示要用TextView;
2.我要实现创建两个数组,一个是int型数组a[ ],在下面代码中设置的长度是19,用来存放各种数字,还有一个是字符串数组b[ ],在下面的代码中我设置的长度是18,因为在正常的输入中,进行运算的数字总比运算符多一位,与此同时我还要声明一个int静态变量postion,我要用这一个变量来追踪两个数组的内容,postion当然初始化为0。
3.我还要设置两个字符串变量firStr,secStr,因为我打算将用户输入的数字处理过程与用户输入过程的呈现分开,两个字符串初始都为“”;
假设现在程序开始运行,用户开始进行输入,现在用户已经输入一个数字5,那么执行的是firStr +="5";secStr+="5";用户又输入一个数字2;那么执行的是firStr +=”2“;secStr +="2";现在firStr == sexStr == "52";假设用户在输入这两个数字之后,他想输入一个运算符"+";那么当他摁"+"这个按钮时的点击事件是:a[postion] = String.valueOf(firStr);b[postion++] = "+";firStr ="";firStr我要清空用来处理下一串数字,而secStr不变,除了清楚按钮之外,任何按钮的点击事件中都会有一句:textView。setText(secStr),因为它是用来显示的;
4.假如现在用户输入的结果是1 + 2 * 3* 4+ 2 =,那么当按下等号时,要先把firStr保存起来。那么a[ ] ={1,2,3,4,2},b[] = {"+","*","*","+"},然后开始进行运算,四则运算是有优先级的,我决定首先遍历b[]数组;我需要先设定一个布尔值,下面代码中我设置的是haveStatic;我还声明了几个变量,下面是核心代码:
int i; int start= 0; int end = 0; for(i = 0;i<postion ;i++){ if("*".equals(b[i])) { if (haveStatic == false) { start = i; end = i+1; haveStatic = true; Log.i("hsd", "havestatic赋值为true"); } else { end++; } } if("/".equals(b[i])) { if (a[i+1] != 0) { if (haveStatic == false) { start = i; end = i+1; haveStatic = true; Log.i("hsd", "havestatic赋值为true"); } else { end++; } } else { aBoolean = true; break; } } if("+".equals(b[i]) || "-".equals(b[i]) ) { Log.i("location", String.valueOf(i)); Log.i("location", String.valueOf(start)); Log.i("location", String.valueOf(end)); if (haveStatic == true) { for (int r = start; r < end; r++){ Log.i("sdadasa", "for循环"); if("*".equals(b[r])){ a[start] *= a[r+1]; b[r] = "+"; a[r+1] = 0; Log.i("location", "加号变乘号可"); } if("/".equals(b[r])){ a[start] /= a[r+1]; b[r] = "+"; a[r+1] = 0; } } Log.i("hsd", "havestatic==true"); haveStatic = false; } else { Log.i("hsd", "havestatic==false"); } }}
计算式1 + 2 * 3* 4+ 2 执行上面循环之后:a[ ] ={1,2,3,4,2},b[] = {"+","*","*","+"}变为a[ ] ={1,24,0,0,2},b[] = {"+","+","+","+"}
然后再对b[]数组进行一次循环就可以只计算加减啦;
5.其实还有一个问题,就是上面的代码我是在 *或者/后面还有+或者-才能处理前面的局部的结果如果碰到1+2*3*4-5*6*7=怎么办呢?
6.如果用户一上来不输入数字直接输入运算符怎么办呢???
7.如果用户最后摁等号之前没有输入数字而是留了个运算符该怎么办呢?
8.如果用户除以0怎么呢??
9.如果用户输入的运算符超过18个了怎么办呢???
10.如果现在等号出了结果,用户清除直接再输入数字怎么办呢??
看代码吧!!
布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#30353B" android:paddingLeft="15dp" android:paddingRight="15dp" tools:context="com.example.myapplication.MainActivity"> <LinearLayout style="@style/alinStyle" android:layout_above="@+id/linearLayout" android:layout_alignParentRight="true" android:layout_marginBottom="0dp" android:id="@+id/linearLayout2"></LinearLayout> <LinearLayout style="@style/parentLinStyle" android:layout_above="@+id/linearLayout2" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/linearLayout4"> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="7" android:id="@+id/btn_7" /> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="8" android:id="@+id/btn_8" /> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="9" android:id="@+id/btn_9" /> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="X" android:id="@+id/btn_cheng" /> <LinearLayout style="@style/linStyle"></LinearLayout> </LinearLayout> <LinearLayout style="@style/alinStyle" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/linearLayout3"></LinearLayout> <LinearLayout style="@style/parentLinStyle" android:id="@+id/linearLayout" android:layout_above="@+id/linearLayout3" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="0" android:id="@+id/btn_0" /> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="C" android:id="@+id/btn_qingchu" /> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="=" android:id="@+id/btn_deng" /> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="/" android:id="@+id/btn_chu" /> <LinearLayout style="@style/linStyle"></LinearLayout> </LinearLayout> <LinearLayout style="@style/alinStyle" android:layout_above="@+id/linearLayout4" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/linearLayout5"></LinearLayout> <LinearLayout style="@style/parentLinStyle" android:layout_above="@+id/linearLayout5" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/linearLayout6"> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="4" android:id="@+id/btn_4" /> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="5" android:id="@+id/btn_5" /> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="6" android:id="@+id/btn_6" /> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="—" android:id="@+id/btn_jian" /> <LinearLayout style="@style/linStyle"></LinearLayout> </LinearLayout> <LinearLayout style="@style/alinStyle" android:layout_above="@+id/linearLayout6" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/linearLayout7"></LinearLayout> <LinearLayout style="@style/parentLinStyle" android:layout_above="@+id/linearLayout7" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/linearLayout8"> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="1" android:layout_height="match_parent" android:id="@+id/btn_1" /> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="2" android:id="@+id/btn_2" /> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="3" android:id="@+id/btn_3" /> <LinearLayout style="@style/linStyle"></LinearLayout> <Button style="@style/aButtonStyle" android:text="+" android:id="@+id/btn_jia" /> <LinearLayout style="@style/linStyle"></LinearLayout> </LinearLayout> <LinearLayout style="@style/alinStyle" android:layout_above="@+id/linearLayout8" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/linearLayout9"></LinearLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@+id/linearLayout9" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:id="@+id/relativeLayout"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00ffffff" android:textColor="#FFFFFF" android:textSize="40dp" android:id="@+id/textView2" android:maxLines="3" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@+id/relativeLayout" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"> <TextView android:maxLines="3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00ffffff" android:textColor="#6fFFFFFF" android:textSize="30dp" android:id="@+id/textView" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> </RelativeLayout></RelativeLayout>
style.xml:<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <style name="aButtonStyle"> <item name="android:layout_height">match_parent</item> <item name="android:layout_width">0dp</item> <item name="android:textColor">#FFFFFF</item> <item name="android:textSize">22dp</item> <item name="android:background">#00FFFFFF</item> <item name="android:layout_weight">1</item> </style> <style name="linStyle"> <item name="android:layout_width">2dp</item> <item name="android:layout_height">match_parent</item> <item name="android:background">#2fe7e7e8</item> </style> <style name="alinStyle"> <item name="android:background">#2fe7e8e9</item> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">2dp</item> <item name="android:orientation">horizontal</item> </style> <style name="parentLinStyle"> <item name="android:background">#00FFFFFF</item> <item name="android:layout_height">70dp</item> <item name="android:layout_width">match_parent</item> </style></resources>
mainactivity.java
import android.os.Build;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.Editable;import android.text.TextWatcher;import android.util.Log;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.Button;import android.widget.TextView;import java.util.Stack;public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button btn_1,btn_2,btn_3,btn_4,btn_5,btn_6,btn_7,btn_8,btn_9,btn_0, btn_jia,btn_jian,btn_cheng,btn_chu,btn_qingchu,btn_deng; private TextView textView,textView1; private static Boolean havaresult = false,aBoolean=false,haveStatic=false; private static String firStr = ""; private static String secStr = ""; private static int postion = 0 ,result = 0; private int[] a = new int[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; private String[] b = new String[]{"","","","","","","","","","","","","","","","","",""}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i("整型数组长度", "onCreate: " + a.length); Log.i("字符串数组长度", "onCreate: " + b.length); initSetting(); initView(); } private void initView() { textView = (TextView) findViewById(R.id.textView); textView1= (TextView) findViewById(R.id.textView2); btn_0 = (Button) findViewById(R.id.btn_0); btn_0.setOnClickListener(this); btn_1 = (Button) findViewById(R.id.btn_1); btn_1.setOnClickListener(this); btn_2 = (Button) findViewById(R.id.btn_2); btn_2.setOnClickListener(this); btn_3 = (Button) findViewById(R.id.btn_3); btn_3.setOnClickListener(this); btn_4 = (Button) findViewById(R.id.btn_4); btn_4.setOnClickListener(this); btn_5 = (Button) findViewById(R.id.btn_5); btn_5.setOnClickListener(this); btn_6 = (Button) findViewById(R.id.btn_6); btn_6.setOnClickListener(this); btn_7 = (Button) findViewById(R.id.btn_7); btn_7.setOnClickListener(this); btn_8 = (Button) findViewById(R.id.btn_8); btn_8.setOnClickListener(this); btn_9 = (Button) findViewById(R.id.btn_9); btn_9.setOnClickListener(this); btn_jia = (Button) findViewById(R.id.btn_jia); btn_jia.setOnClickListener(this); btn_jian = (Button) findViewById(R.id.btn_jian); btn_jian.setOnClickListener(this); btn_cheng = (Button) findViewById(R.id.btn_cheng); btn_cheng.setOnClickListener(this); btn_chu= (Button) findViewById(R.id.btn_chu); btn_chu.setOnClickListener(this); btn_deng = (Button) findViewById(R.id.btn_deng); btn_deng.setOnClickListener(this); btn_qingchu = (Button) findViewById(R.id.btn_qingchu); btn_qingchu.setOnClickListener(this); } private void initSetting() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window window = getWindow(); // Translucent status bar window.setFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn_0 : number("0"); break; case R.id.btn_1 : number("1"); break; case R.id.btn_2 : number("2"); break; case R.id.btn_3 : number("3"); break; case R.id.btn_4 : number("4"); break; case R.id.btn_5 : number("5"); break; case R.id.btn_6 : number("6"); break; case R.id.btn_7 : number("7"); break; case R.id.btn_8 : number("8"); break; case R.id.btn_9: number("9"); break; case R.id.btn_jia : if(havaresult ==true){ textView.setText(secStr); secStr=""; int x =result; qingchu(); a[0] = x; secStr=a[0]+"+"; textView1.setText(secStr); b[0] = "+"; postion++; havaresult = false; //jia(); }else{ jia(); } break; case R.id.btn_jian : if(havaresult ==true){ textView.setText(secStr); secStr=""; int x =result; qingchu(); a[0] = x; secStr=a[0]+"-"; textView1.setText(secStr); b[0] = "-"; postion++; havaresult = false; // jian(); havaresult = false; }else{ jian(); } break; case R.id.btn_cheng : if(havaresult ==true){ textView.setText(secStr); secStr=""; int x =result; qingchu(); a[0] = x; secStr=a[0]+"X"; textView1.setText(secStr); b[0] = "*"; postion++; havaresult = false; //cheng(); havaresult = false; }else{ cheng(); } break; case R.id.btn_chu : if(havaresult ==true){ textView.setText(secStr); secStr=""; int x =result; qingchu(); a[0] = x; secStr=a[0]+"/"; textView1.setText(secStr); b[0] = "/"; postion++; havaresult = false; //chu(); havaresult = false; }else{ chu(); } break; case R.id.btn_deng : if(havaresult == false){ deng();} break; case R.id.btn_qingchu : qingchu(); textView1.setText(""); secStr = ""; havaresult = true; break; default: break; } } private void number(String i) { if(havaresult == false) { firStr += i; secStr += i; textView1.setText(secStr); }else { textView.setText(secStr); qingchu(); secStr = ""; firStr += i; secStr += i; textView1.setText(secStr); havaresult = false; } } private void qingchu() { firStr = ""; result = 0; postion = 0; for(int i = 0 ;i <10;i++){ a[i] = 0; } for (int i = 0;i<9;i++){ b[i]=""; } } private void deng() { int i; int start= 0; int end = 0; if(firStr != ""){ a[postion] = Integer.valueOf(firStr); firStr = ""; postion++; }else{ b[postion - 1] = "+"; postion++; } Log.i("整型数组a 第一次遍历之前:", getaString(a)); Log.i("字符串数组b第一次遍历之前:", getaString(b)); for(i = 0;i<postion ;i++){ if("*".equals(b[i])) { if (haveStatic == false) { start = i; end = i+1; haveStatic = true; Log.i("hsd", "havestatic赋值为true"); } else { end++; } } if("/".equals(b[i])) { if (a[i+1] != 0) { if (haveStatic == false) { start = i; end = i+1; haveStatic = true; Log.i("hsd", "havestatic赋值为true"); } else { end++; } } else { aBoolean = true; break; } } if("+".equals(b[i]) || "-".equals(b[i]) ) { Log.i("location", String.valueOf(i)); Log.i("location", String.valueOf(start)); Log.i("location", String.valueOf(end)); if (haveStatic == true) { for (int r = start; r < end; r++){ Log.i("sdadasa", "for循环"); if("*".equals(b[r])){ a[start] *= a[r+1]; b[r] = "+"; a[r+1] = 0; Log.i("location", "加号变乘号可"); } if("/".equals(b[r])){ a[start] /= a[r+1]; b[r] = "+"; a[r+1] = 0; } } Log.i("hsd", "havestatic==true"); haveStatic = false; } else { Log.i("hsd", "havestatic==false"); } } } if (haveStatic == true) { for (int r = start; r < end; r++){ Log.i("sdadasa", "for循环"); if("*".equals(b[r])){ a[start] *= a[r+1]; b[r] = "+"; a[r+1] = 0; Log.i("location", "加号变乘号可"); } if("/".equals(b[r])){ a[start] /= a[r+1]; b[r] = "+"; a[r+1] = 0; } } Log.i("hsd", "havestatic==true"); haveStatic = false; } Log.i("整型数组a 第一次遍历之后:", getaString(a)); Log.i("字符串数组b第一次遍历之后:", getaString(b)); result= a[0]; String f = String.valueOf(a[0]); for(i = 0;i<postion-1 ;i++){ if("+".equals(b[i])){ result += a[i+1]; f +="+" + a[i+1]; } if("-".equals(b[i])){ result -= a[i+1]; f +="-" + a[i+1]; } } Log.i("第二次遍历的运算过程:", f + "="+String.valueOf(result)); if(aBoolean ==false){ secStr =secStr+"="+result; textView1.setText(secStr); } if(aBoolean==true){ textView1.setText("错误"); aBoolean = false; qingchu(); } havaresult = true; } private void chu() { if(firStr != ""){ a[postion] = Integer.valueOf(firStr); if(isok()){ b[postion] = "/"; secStr+="/"; textView1.setText(secStr); postion+=1; firStr = ""; }else{ qingchu(); secStr = ""; textView1.setText("你最多输入18个运算符!!"); textView.setText(secStr); } }else{ } } private void cheng() { if(firStr != ""){ a[postion] = Integer.valueOf(firStr); if(isok()){ b[postion] = "*"; secStr+="X"; textView1.setText(secStr); postion+=1; firStr = ""; }else{ qingchu(); secStr = ""; textView1.setText("你最多输入18个运算符!!"); textView.setText(secStr); } } } private void jian() { if(firStr != ""){ a[postion] = Integer.valueOf(firStr); if(isok()){ b[postion] = "-"; secStr+="-"; textView1.setText(secStr); postion+=1; firStr = ""; }else{ qingchu(); secStr = ""; textView1.setText("你最多输入18个运算符!!"); textView.setText(secStr); } } } private void jia() { if(firStr != ""){ a[postion] = Integer.valueOf(firStr); if(isok()){ b[postion] = "+"; secStr+="+"; textView1.setText(secStr); postion+=1; firStr = ""; }else{ qingchu(); secStr = ""; textView1.setText("你最多输入18个运算符!!"); textView.setText(secStr); } } } public boolean isok() { if(postion >= 18){ return false; }else { return true; } } public String getaString(int ao[]){ String v=""; for(int i=0; i<postion;i++){ v+=a[i] + " "; } return v; } public String getaString(String ao[]){ String v=""; for(int i=0; i<postion;i++){ v+=" "+b[i]; } return v; }}
写布局没有写上小数点,真是菜啊也懒得改了。代码可能有点啰嗦,留着以后回来改。
- Android用java数组实现计算器的四则运算
- 栈 实现四则运算的计算器
- java简单计算器实现,只有四则运算
- 栈的应用--计算器实现四则运算
- android开发【可以进行四则运算的计算器】
- java中四则运算计算器
- 控制台的四则运算计算器
- 简单的四则运算计算器
- 简单的四则运算计算器
- 用java实现简单四则运算的算法
- java-swing编程,实现计算器——支持四则运算
- 正则表达式实现的加减乘除四则运算的计算器
- Java实现四则运算的解析
- java 四则运算 栈的实现
- java 四则运算 栈的实现
- java 四则运算 栈的实现
- Java版四则运算简易计算器
- 计算器C#代码(实现整数的四则运算)
- 在虚拟机上安装Red Hat Enterprise Linux 5的教程
- 微信端开发 服务器配置 jssdk 方法调用
- spring mvc@requestBody接收json对象字符串
- 美国高中的兼职——实验室助理
- spring4.0.9结合redis进行数据的缓存
- Android用java数组实现计算器的四则运算
- 论文--搜索批量下载_linux
- LiteOrm:Android数据库框架-存储服务器(LiteOrm)的使用
- android中使用static 类造成的问题
- 项目质量管理
- 封装、继承、多态
- EditText设置只能输入小数点后1位
- 关于Ubuntu锁屏后,无法输入密码
- PHP面向对象编程 面向对象的特殊实践