一、简单的小背景
老师之前布置的一个用AS实现一个简单计算器的作业,作为一个刚学AS的小白渣是真的无从下手。。。所以在网上东拼西凑也算是有了基础的想法。
大致框架出来了,最后依然有一些小bug我真的无力了。问题在最下面,如果有大佬能指教一番那当然是感激不尽了。
下面就先贴一些图吧。

二、代码
1,布局代码

<?xml version="1.0" encoding="utf-8"?>

<TextViewandroid:id="@+id/myText"android:textSize="35sp"android:layout_width="match_parent"android:layout_height="200dp"android:background="@drawable/text_border"android:layout_marginTop="10dp"/><LinearLayoutstyle="@style/Liner_style"android:layout_marginTop="30dp"><Buttonandroid:id="@+id/delete_btn"style="@style/Btn_style1"android:text="退格" /><Buttonandroid:id="@+id/clean_btn"style="@style/Btn_style2"android:text="清除" /><Buttonandroid:id="@+id/sign_btn"style="@style/Btn_style2"android:text="+/-" /><Buttonandroid:id="@+id/add_btn"style="@style/Btn_style2"android:text="+" /></LinearLayout><LinearLayoutstyle="@style/Liner_style"><Buttonandroid:id="@+id/num_7"style="@style/Btn_style1"android:text="7" /><Buttonandroid:id="@+id/num_8"style="@style/Btn_style2"android:text="8" /><Buttonandroid:id="@+id/num_9"style="@style/Btn_style2"android:text="9" /><Buttonandroid:id="@+id/sub_btn"style="@style/Btn_style2"android:text="-" /></LinearLayout><LinearLayoutstyle="@style/Liner_style"><Buttonandroid:id="@+id/num_4"style="@style/Btn_style1"android:text="4" /><Buttonandroid:id="@+id/num_5"style="@style/Btn_style2"android:text="5" /><Buttonandroid:id="@+id/num_6"style="@style/Btn_style2"android:text="6" /><Buttonandroid:id="@+id/mul_btn"style="@style/Btn_style2"android:text="*" /></LinearLayout><LinearLayoutstyle="@style/Liner_style"><Buttonandroid:id="@+id/num_1"style="@style/Btn_style1"android:text="1" /><Buttonandroid:id="@+id/num_2"style="@style/Btn_style2"android:text="2" /><Buttonandroid:id="@+id/num_3"style="@style/Btn_style2"android:text="3" /><Buttonandroid:id="@+id/div_btn"style="@style/Btn_style2"android:text="/" /></LinearLayout><LinearLayoutstyle="@style/Liner_style"><Buttonandroid:id="@+id/num_0"style="@style/Btn_style1"android:text="0" /><Buttonandroid:id="@+id/point_btn"style="@style/Btn_style2"android:text="." /><Buttonandroid:id="@+id/deno_btn"style="@style/Btn_style2"android:text="1/X" /><Buttonandroid:id="@+id/equal_btn"style="@style/Btn_style2"android:text="=" /></LinearLayout>

边框和几个style的代码
边框是要在drawable里编写

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="@color/white"></solid><corners android:radius="5dp"></corners><stroke android:width="1dp" android:color="@color/black"></stroke></shape>

style是要在values–>style里编写

    <style name="Liner_style" parent="TextAppearance.AppCompat"><item name="android:layout_width">match_parent</item><item name="android:layout_height">50dp</item><item name="android:orientation">horizontal</item><item name="android:paddingLeft">15dp</item></style><style name="Btn_style1" parent="TextAppearance.AppCompat"><item name="android:layout_width">80dp</item><item name="android:layout_height">50dp</item><item name="android:layout_marginLeft">10dp</item></style><style name="Btn_style2" parent="Btn_style1"><item name="android:layout_marginLeft">4dp</item></style>

2,控制文件

package com.example.dell.myapplication;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;import java.text.Format;
import java.text.NumberFormat;public class MainActivity extends AppCompatActivity implements View.OnClickListener {Button n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,add,sub,mul,div,equ,sign,point,deno,del,cln;TextView the_text=null;String showString="",myString="",first_num="",all_num="";String option="";Double result=0.0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);n0=findViewById(R.id.num_0);n1=findViewById(R.id.num_1);n2=findViewById(R.id.num_2);n3=findViewById(R.id.num_3);n4=findViewById(R.id.num_4);n5=findViewById(R.id.num_5);n6=findViewById(R.id.num_6);n7=findViewById(R.id.num_7);n8=findViewById(R.id.num_8);n9=findViewById(R.id.num_9);add=findViewById(R.id.add_btn);sub=findViewById(R.id.sub_btn);mul=findViewById(R.id.mul_btn);div=findViewById(R.id.div_btn);equ=findViewById(R.id.equal_btn);sign=findViewById(R.id.sign_btn);point=findViewById(R.id.point_btn);deno=findViewById(R.id.deno_btn);del=findViewById(R.id.delete_btn);cln=findViewById(R.id.clean_btn);the_text=findViewById(R.id.myText);n0.setOnClickListener(this);n1.setOnClickListener(this);n2.setOnClickListener(this);n3.setOnClickListener(this);n4.setOnClickListener(this);n5.setOnClickListener(this);n6.setOnClickListener(this);n7.setOnClickListener(this);n8.setOnClickListener(this);n9.setOnClickListener(this);add.setOnClickListener(this);sub.setOnClickListener(this);mul.setOnClickListener(this);div.setOnClickListener(this);equ.setOnClickListener(this);sign.setOnClickListener(this);point.setOnClickListener(this);deno.setOnClickListener(this);del.setOnClickListener(this);cln.setOnClickListener(this);}@Overridepublic void onClick(View v){switch (v.getId()){case R.id.num_0:myString+="0";all_num+="0";showString+="0";the_text.setText(showString);break;case R.id.num_1:myString+="1";all_num+="1";showString+="1";the_text.setText(showString);break;case R.id.num_2:myString+="2";all_num+="2";showString+="2";the_text.setText(showString);break;case R.id.num_3:myString+="3";all_num+="3";showString+="3";the_text.setText(showString);break;case R.id.num_4:myString+="4";all_num+="4";showString+="4";the_text.setText(showString);break;case R.id.num_5:myString+="5";all_num+="5";showString+="5";the_text.setText(showString);break;case R.id.num_6:myString+="6";all_num+="6";showString+="6";the_text.setText(showString);break;case R.id.num_7:myString+="7";all_num+="7";showString+="7";the_text.setText(showString);break;case R.id.num_8:myString+="8";all_num+="8";showString+="8";the_text.setText(showString);break;case R.id.num_9:myString+="9";all_num+="9";showString+="9";the_text.setText(showString);break;case R.id.point_btn:myString+=".";all_num+=".";showString+=".";the_text.setText(showString);break;case R.id.add_btn:if(!myString.equals("")){first_num=all_num;option="+";showString+=option;the_text.setText(showString);myString+=option;all_num="";}break;case R.id.sub_btn:if(!myString.equals("")){first_num=all_num;option="-";showString+=option;the_text.setText(showString);myString+=option;all_num="";}break;case R.id.mul_btn:if(!myString.equals("")){first_num=all_num;option="*";showString+=option;the_text.setText(showString);myString+=option;all_num="";}break;case R.id.div_btn:if(!myString.equals("")){first_num=all_num;option="/";showString+=option;the_text.setText(showString);myString+=option;all_num="";}break;case R.id.equal_btn:if(option.equals("+")){result=Double.parseDouble(first_num)+Double.parseDouble(all_num);}else if(option.equals("-")){result=Double.parseDouble(first_num)-Double.parseDouble(all_num);}else if (option.equals("*")){result=Double.parseDouble(first_num)*Double.parseDouble(all_num);}else if (option.equals("/")){if(all_num.equals("0")){break;}elseresult=Double.parseDouble(first_num)/Double.parseDouble(all_num);}elseresult=Double.parseDouble(all_num);the_text.setText(""+result);first_num="";all_num="";myString="";showString="";break;case R.id.sign_btn:if(!all_num.contains("+")&&!all_num.contains("-")){all_num="-"+all_num;if(!showString.contains("+")&&!showString.contains("-")&&!showString.contains("*")&&!showString.contains("/")){showString="-"+showString;the_text.setText(showString);}elsethe_text.setText(showString.substring(0,showString.indexOf("")+2)+"-"+showString.substring(showString.indexOf("")+2));}else if(all_num.contains("-")){all_num="+"+all_num;if(!showString.contains("+")&&!showString.contains("-")&&!showString.contains("*")&&!showString.contains("/")){showString="+"+showString;the_text.setText(showString);}elsethe_text.setText(showString.substring(0,showString.indexOf("")+2)+"+"+showString.substring(showString.indexOf("")+2));}break;case R.id.deno_btn:if(!all_num.equals("")&&!all_num.equals("0")){all_num=String.valueOf(1/Double.parseDouble(all_num));if(!showString.contains("+")&&!showString.contains("-")&&!showString.contains("*")&&!showString.contains("/")){showString="1/"+showString;the_text.setText(showString);}elsethe_text.setText(showString.substring(0,showString.indexOf("")+2)+"1/"+showString.substring(showString.indexOf("")+2));}break;case R.id.delete_btn:if(!showString.equals("")){showString = showString.substring(0, showString.length() - 1);if(!all_num.equals("")){all_num=all_num.substring(0,all_num.length()-1);}if(!myString.equals("")){myString=myString.substring(0,myString.length()-1);}if(showString.length()==first_num.length()){first_num=first_num.substring(0,first_num.length()-1);first_num=showString+all_num;}if(showString.length()==first_num.length()){option="";}//     the_text.setText(showString+"  "+showString.length()+"   mystring:"+myString.length()+"first:"+first_num+"  all"+all_num.length()+" op"+option);}break;case R.id.clean_btn:all_num="";first_num="";showString="";myString="";the_text.setText(showString);break;default:break;}}
}

说实话,我感觉自己写的代码好累赘。主要写的时候发现了一个问题就想着怎么解决,没考虑整体,所以代码有些乱。
在这个计算器中除了加减乘除外还有几个功能:正负号,分母化(1/X,其实我不知道这到底叫啥)和退格。我没有找到实现类似功能的代码或者我看不懂。。或者感觉不适合我的代码而我又懒得再改。
正负号和分母化的问题我基本已经解决了,不过我记得昨天实现好像还有些小bug,但貌似没什么影响我今天也就没继续管。
剩下的就是退格的问题了。
退格部分的代码如下

 case R.id.delete_btn:if(!showString.equals("")){showString = showString.substring(0, showString.length() - 1);if(!all_num.equals("")){all_num=all_num.substring(0,all_num.length()-1);}if(!myString.equals("")){myString=myString.substring(0,myString.length()-1);}if(showString.length()==first_num.length()){first_num=first_num.substring(0,first_num.length()-1);first_num=showString+all_num;}if(showString.length()==first_num.length()){option="";}the_text.setText(showString+"  "+showString.length()+"   mystring:"+myString.length()+"first:"+first_num+"  all"+all_num.length()+" op"+option);}break;

我的想法是每按一次按键字符串的长度就-1,但在我的代码里有几个问题,以11+22来举例吧。
1.先说明一下想法:用all_num来记录数字,用option来记录运算符,先输入“11”,此时all_num=11;当输入“+”后,first_num=all_num=11,all_num为空可以记录下一个数字。所以在11+22中,first_num=11,option=+,all_num=22。
2.问题:当退格到11+时,后面再改数字是没有问题的。但当退格到11或者1时,后面再输入运算符就无法运算。其实问题很简单,因为输入运算符后,first_num=“”,也就相当于:空+22的效果。所以如果再输一个数再加上运算符就可以了。但如果这样的话就显示的是111+22=33,第一个1不计入first_num里也就不参与运算。
所以解决方法是:如何在退格到11+范围内的时候将剩下的数放到first_num里参与运算。我想了很多方法都没实现,原因估计我是个小白渣吧(无奈)。当然也可能是我想复杂了。
反正如果上交作业时我还没想出来那就暂且这样吧,如果问题解决了就再更新吧。

用AS编写一个简单计算器相关推荐

  1. 用java编写一个简单计算器

    java 采用java编写一个简单计算器,使用awt和swing 代码如下: import java.awt.Color; import java.awt.Font; import java.awt. ...

  2. php编写一个简单计算器程序,PHP做一个简单的计算器

    本文为大家讲解通过分支循环知识及PHP的表单处理一个简单的计算器 首先看下效果 通过网页显示计算器样式 在网页样式中可以看出,有两个输入框Num1.Num2和一个下拉框Type 还有一个提交按钮 在输 ...

  3. php编写一个简单计算器程序,PHP 简单计算器代码实现

    /* * 简单计算器 */ error_reporting(E_ALL & ~E_NOTICE); if(isset($_POST['sub'])){ $a = $_POST['num1']; ...

  4. python编写一个简单计算器_如何用Tkinter写个简单计算器

    上机实践课程开始了,嗯,老师来了之后念了下PPT,然后说:开始做吧......... 然后就开始了Python的GUI之路,以前没接触过PYthon的可视化界面(虽然这样很不明智) 但是现在做起来感觉 ...

  5. python语言的记事本在哪_用python语言编写一个简单记事本

    看了一点python的基础教程,忍不住手就痒了,找来一个题目练一下喽. 题目:编写一个功能简单的记事本. 编写记事本就要用到GUI的功能,最常用的当然是wxpython,那么我们就用这个来写一个记事本 ...

  6. Java制作一个盒子程序_编写一个简单的Java程序,模拟计算器的功能。

    提问:编写一个简单的Java程序,模拟计算器的功能. 网友回答: 程序参考: import java.awt.*; import java.awt.event.ActionEvent; import ...

  7. 用php实现加减乘除计算器,利用php怎么编写一个加减乘除计算器

    利用php怎么编写一个加减乘除计算器 发布时间:2021-01-16 11:22:55 来源:亿速云 阅读:99 作者:Leah 利用php怎么编写一个加减乘除计算器?很多新手对此不是很清楚,为了帮助 ...

  8. 使用Qt做一个简单计算器

    title: Calculator date: 2022-09-04 11:10:12 tags: [Qt, 应用, C++] typora-root-url: Calculator 使用Qt做一个简 ...

  9. 电脑用java怎么编程,使用java编程从0到1实现一个简单计算器

    学习编程语言最重要的就是实践.很多小伙伴在学习完编程语言后,一直停留在基础阶段,只懂一大堆理论知识,而不懂得实践.那么,今天我们一起来动手做一个小计算器,回顾下学习过的知识,同时这也是很多大学计算机专 ...

最新文章

  1. Centos7解决图形界面卡死问题
  2. CF986A Fair
  3. 如何在 Mac 上切换语言
  4. Linux学习笔记-对父子进程直接通信基础与实例
  5. asp.net下载文件的常用方法大全
  6. 2011版计算机网络原理,2011年7月自考04741计算机网络原理真题及答案
  7. 口译务实——unit10 II
  8. 321. 拼接最大数
  9. python sys.exc_info()详解
  10. android 直播 h5,H5移动端直播的要点
  11. android创建vcf格式,C#生成vcf 文件源代码 QuotedPrintable 解码支持中文支持Android-vcf文件怎么打开...
  12. java环境手机版_Java环境搭建
  13. 你知道 1 + 1 等于几吗?
  14. 企业网络安全最常遇到的安全问题是什么,主要面临哪些威胁?
  15. 填坑Go-“can‘t load package“
  16. ListView适配器
  17. HR面试问题总结(HR面经)
  18. python“渡劫”进阶期(继承、多态、私有化、异常捕获、类属性和类方法)
  19. 3d可视化建模产品三维展示平台应用广
  20. 逆波兰式-C++实现方法

热门文章

  1. proftpd安装及基本配置
  2. 非相关子查询和相关子查询执行过程详解
  3. 【Linux】面试题4.5
  4. GROW模型(转载)
  5. 游戏音乐制作中要注意的五大问题
  6. 罗德里格斯公式使用示例
  7. 启发式算法/灰狼优化算法
  8. 向AlphaGo进化,应用增强式学习技术打造超越人类的围棋机器人
  9. MyBatis框架思维导图
  10. Java(计算圆的面积)