简单安卓计算器(课后小作业)

简单安卓计算器(课后小作业)
实现了基本的加减乘除取余运算可以叠加运算
首先给计算器布局 用的是TableLayout TableRow布的局 主要是老师要求这么做的还可以线性布局




    <Button
        android:layout_weight="1"
        android:id="@+id/btn_cl"
        android:text="c"
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_del"
        android:text="del"
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_remainder"
        android:text="%"
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_divide"
        android:text="/"
        android:textSize="25dp" />
</TableRow>


<TableRow
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_7"
        android:text="7"
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_8"
        android:text="8"
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_9"
        android:text="9"
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_multiply"
        android:text="*"
        android:textSize="25dp" />
</TableRow>
<TableRow
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_4"
        android:text="4"
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_5"
        android:text="5"
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_6"
        android:text="6"
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_subtract"
        android:text="-"
        android:textSize="25dp" />

</TableRow>
<TableRow
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_3"
        android:text="3"
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_2"
        android:text="2"
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_1"
        android:text="1"
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_add"
        android:text="+"
        android:textSize="25dp" />

</TableRow>
<TableRow
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_weight="1"
        android:text=""
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_0"
        android:text="0"
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_point"
        android:text="."
        android:textSize="25dp" />

    <Button
        android:layout_weight="1"
        android:id="@+id/btn_equal"
        android:text="="
        android:textSize="25dp" />

</TableRow>
效果图如下:

在这里插入图片描述仿照小米手机计算器UI设计的
在对CalculatorActivity.java进行编码

public class CalculatorActivity extends AppCompatActivity {
TextView textView;
int[] buttons = new int[]{R.id.btn_0,R.id.btn_1,R.id.btn_2,
R.id.btn_3,R.id.btn_4,R.id.btn_5
,R.id.btn_6,R.id.btn_7,R.id.btn_8,
R.id.btn_9,};//用来储存数字键
Button btnnum;
int result;
String str1="";
String str2="";
int num1,num2;
double dnum1,dnum2,dresult;//第一个数 第二个数
int flag=0;//12345 分别对应±*/% 如果是0就是第一次输入.
int isSecond=0;//是不是第一次输入之后
int isPoint=0;//是否是小数
int ispoint=0;//除法出完之后带的小数点
int isContinue=0;//是否在原基础上继续算数 默认是不继续
Button buttonadd;
Button buttonsubtract;
Button buttonmultiply;
Button buttondivide;
Button buttonremainder;
Button buttondel;
Button buttoncl;
Button buttonequal;
Button buttonpoint;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.calculator_layout);
    //初始化
    flag=0;//默认是第一次输入
    textView = (TextView)findViewById(R.id.tv);
    buttonadd = (Button)findViewById(R.id.btn_add);
    buttonsubtract = (Button)findViewById(R.id.btn_subtract);
    buttonmultiply = (Button)findViewById(R.id.btn_multiply);
    buttondivide = (Button)findViewById(R.id.btn_divide);
    buttonremainder = (Button)findViewById(R.id.btn_remainder);
    buttondel = (Button)findViewById(R.id.btn_del);
    buttoncl = (Button)findViewById(R.id.btn_cl);
    buttonequal = (Button)findViewById(R.id.btn_equal);
    buttonpoint = (Button)findViewById(R.id.btn_point);
    //给数字键进行声明并且设置监听
    for (int i =0;i < buttons.length;i++){
    btnnum = (Button)findViewById(buttons[i]);
        //设置监听
        btnnum.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               //判断是不是第一次输入
                if (flag != 0){
                    str1 = "";
                    isSecond=1;
                   // str2=textView.getText().toString().trim();
                }else {
                    str1 = textView.getText().toString().trim();
                    if (str1.equals("0")){
                        str1 = "";
                    }
                }
                if (isSecond==1){
                    //str2=textView.getText().toString().trim();
                    str2 =str2 + String.valueOf(((Button)view).getText());
                   // Toast.makeText(CalculatorActivity.this,"str2"+str2,Toast.LENGTH_SHORT).show();
                    textView.setText(str2);
                }
                else {
                str1 = str1 + String.valueOf(((Button)view).getText());//获取输入的数字
                   // Toast.makeText(CalculatorActivity.this,"str1"+str1,Toast.LENGTH_SHORT).show();
                textView.setText(str1);}
               // flag = -1;//输入完成改变flag

            }
        });
        //给+-*/%设置监听 flage 的数字代表要执行的操作
        buttonadd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (str1.length()!=0){
                    if (isContinue==1|| ispoint==1){//ispoint==1 是为了除法之后获得str1要不然会获得前一个
                       textView.setText(str1);
                        str1=textView.getText().toString().trim();
                       // Toast.makeText(CalculatorActivity.this,"str"+str1,Toast.LENGTH_LONG).show();
                    }else{
                        str1 = textView.getText().toString().trim();
                    }
                    if (isPoint==-1|| ispoint==1){
                       dnum1 = Double.parseDouble(str1);
                        //Toast.makeText(CalculatorActivity.this,"str1"+dnum1,Toast.LENGTH_LONG).show();
                        //isPoint=0;
                    }else{
                        num1 = Integer.parseInt(str1);
                    }
                flag = 1;
                    //fl=1;
                }else {
                    Toast.makeText(CalculatorActivity.this,"首位不能是运算符",Toast.LENGTH_LONG).show();
                }
              //  result = num1+num2;
               /*String str = num1 +"+"+ num2+"="+result;
                textView.setText(str);*/
            }
        });
        buttonsubtract.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (str1.length()!=0){
                    if (isContinue==1|| ispoint==1){
                        textView.setText(str1);
                        str1=textView.getText().toString().trim();
                    }else{
                        str1 = textView.getText().toString().trim();
                    }
                    if (isPoint==-1|| ispoint==1){
                        dnum1 = Double.parseDouble(str1);
                       // isPoint=0;
                    }else{
                        num1 = Integer.parseInt(str1);
                    }
                    flag = 2;
                }else {
                    Toast.makeText(CalculatorActivity.this,"首位不能是运算符",Toast.LENGTH_LONG).show();
                }
            }
        });
        buttonmultiply.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (str1.length()!=0){
                    if (isContinue==1|| ispoint==1){
                        textView.setText(str1);
                        str1=textView.getText().toString().trim();
                    }else{
                        str1 = textView.getText().toString().trim();
                    }
                    if (isPoint==-1|| ispoint==1){
                        dnum1 = Double.parseDouble(str1);
                       // isPoint=0;
                    }else{
                        num1 = Integer.parseInt(str1);
                    }
                    flag = 3;
                }else {
                    Toast.makeText(CalculatorActivity.this,"首位不能是运算符",Toast.LENGTH_LONG).show();
                }
            }
        });
        buttondivide.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (str1.length()!=0){
                    if (isContinue==1|| ispoint==1){
                        textView.setText(str1);
                        str1=textView.getText().toString().trim();
                    }else{
                        str1 = textView.getText().toString().trim();
                    }
                    if (isPoint==-1|| ispoint==1){
                        dnum1 = Double.parseDouble(str1);
                        // isPoint=0;
                    }else{
                        num1 = Integer.parseInt(str1);
                    }
                    flag = 4;
                }else {
                    Toast.makeText(CalculatorActivity.this,"首位不能是运算符",Toast.LENGTH_LONG).show();
                }
            }
        });
        buttonremainder.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               // Toast.makeText(CalculatorActivity.this,"此功能有点问题",Toast.LENGTH_LONG).show();
                if (str1.length()!=0){
                    if (isContinue==1|| ispoint==1){
                        textView.setText(str1);
                        str1=textView.getText().toString().trim();
                     //   Toast.makeText(CalculatorActivity.this,str1,Toast.LENGTH_LONG).show();
                    }else{
                        str1 = textView.getText().toString().trim();
                       // Toast.makeText(CalculatorActivity.this,str1,Toast.LENGTH_LONG).show();

                    }
                    if (isPoint==-1|| ispoint==1){
                        dnum1 = Double.parseDouble(str1);
                        // isPoint=0;
                    }else{
                        num1 = Integer.parseInt(str1);
                    }
                    flag = 5;
                }else {
                    Toast.makeText(CalculatorActivity.this,"首位不能是运算符",Toast.LENGTH_LONG).show();
                }
            }
        });
        buttonpoint.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              //  Toast.makeText(CalculatorActivity.this,"diandd",Toast.LENGTH_LONG).show();
                if (str1.length()!=0 && !(str1.startsWith("."))||str2.length()!=0 && !(str2.startsWith("."))) {//小数点必须以数字开头
                  // Toast.makeText(CalculatorActivity.this,"小数点",Toast.LENGTH_LONG).show();
                    isPoint=-1;
                    if (isSecond==1){
                            str2 = str2 + ".";
                        textView.setText(str2);
                       // Toast.makeText(CalculatorActivity.this,"dian",Toast.LENGTH_LONG).show();
                        str2=textView.getText().toString().trim();
                    }else{
                    str1 = str1 + ".";
                    textView.setText(str1);
                    }

                }
            }
        });
        buttondel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (str1.length()!=0){
                str1 = str1.substring(0,str1.length()-1);//截取前str1.length-1的个数  sub不包含最后一个
               textView.setText(str1);
                }
            }
        });
        buttonequal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (isPoint==-1 || ispoint==1){
                    if (isSecond==1){
                        dnum2 = Double.parseDouble(str2);
                    }
                }else{
                    if (isSecond==1){
                        num2 = Integer.parseInt(str2);
                    }
                }
                String[] str = new String[5] ;
                switch (flag){
                    case 1:if (isPoint==-1 || ispoint==1){
                        dresult = dnum1 + dnum2;
                        str[flag-1] = dnum1 +"+"+ dnum2+"="+dresult;
                    }else {
                        result = num1 + num2;
                         str[flag-1] = num1 +"+"+ num2+"="+result;
                    }
                        //textView.setText(str[flag]);
                        break;
                    case 2:if (isPoint==-1 || ispoint==1){
                        dresult = dnum1 - dnum2;
                        str[flag-1] = dnum1 +"-"+ dnum2+"="+dresult;
                    }else {
                        result = num1 - num2;
                        str[flag-1] = num1 +"-"+ num2+"="+result;
                    }
                        break;
                    case 3:if (isPoint==-1 || ispoint==1){
                        dresult = dnum1 * dnum2;
                        str[flag-1] = dnum1 +"*"+ dnum2+"="+dresult;
                    }else {
                        result = num1 * num2;
                        str[flag-1] = num1 +"*"+ num2+"="+result;
                    }
                        break;
                    case 4:if (num1!=0||dnum1!=0){
                        if (isPoint==-1 || ispoint==1){
                            dresult = dnum1 / dnum2;
                            str[flag-1] = dnum1 +"/"+ dnum2+"="+dresult;
                        }else {
                            ispoint=1;
                            dnum1=num1;
                            dnum2=num2;
                            dresult = dnum1 / dnum2;
                            str[flag-1] = dnum1 +"/"+ dnum2+"="+dresult;
                        }
                    }else {
                        Toast.makeText(CalculatorActivity.this,"除数不能为0哦!",Toast.LENGTH_LONG).show();
                    }

                        break;
                   case 5:if (isPoint==-1){
                        dresult = dnum1 % dnum2;
                        str[flag-1] = dnum1 +"%"+ dnum2+"="+dresult;
                    }else {
                        result = num1 % num2;
                        str[flag-1] = num1 +"%"+ num2+"="+result;
                    }
                        break;
                    /*case 5:/*if (isPoint==-1){
                        //a % b = a - (a / b) * b
                        dresult =dnum1 - (dnum1/dnum2)*dnum2;
                        str[flag-1] = dnum1 +"%"+ dnum2+"="+(dnum1 % dnum2);
                    }else {
                        result = num1 - (num1/num2)*num2;
                        str[flag-1] = num1 +"%"+ num2+"="+result;
                    }if (isPoint==-1){
                        dresult = dnum1 % dnum2;
                        str[flag-1] = dnum1 +"%"+ dnum2+"="+dresult;
                    }else {
                        result = num1 % num2;
                        str[flag-1] = num1 +"%"+ num2+"="+result;
                    }
                    break;*/

                }
                    textView.setText(str[flag-1]);
                //isPoint=0;
                isSecond=0;
                isContinue=1;
                str2="";//第二个获得的数字设为空便于以后运算
                //获取计算完之后的结果
                str1="";
                 int i1 = str[flag - 1].lastIndexOf("=");
                 str1 = str[flag-1].substring(i1+1);
              //  Toast.makeText(CalculatorActivity.this,str1,Toast.LENGTH_LONG).show();
            }
        });



    }
    //设置清除按钮的监听
buttoncl.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        textView.setText("0");
        str1 ="";
        str2="";
        num1=0;
        num2=0;
        result=0;
        dnum1=0;
        dnum2=0;
        dresult=0;
        flag=0;
        isPoint=0;
        isSecond=0;
        ispoint=0;
    }
});

}
}
运行结果如下:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

基本功能都已经实现了 可能还一些小错误代码中还可能有一些多余的请见谅。

新人第一次发布有什么不对的地方请告知,下次一定改正 (ง •̀_•́)ง (*•̀ㅂ•́)و

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值