欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

计算器

程序员文章站 2022-03-10 15:47:28
...

Mainactivity.java

package com.example.a18038.myapplication1;

import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    Button btn_0, btn_1, btn_2, btn_3, btn_4, btn_5,
            btn_6, btn_7, btn_8, btn_9, btn_equal,
            btn_point, btn_clean, btn_del, btn_plus,
            btn_minus, btn_multiply, btn_divide,btn_sqrt;
    TextView textView;
    boolean clear_flag=true;
    String firstNumber="";
    String operator="";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //变量初始化
        btn_0 = (Button) findViewById(R.id.btn_0);
        btn_1 = (Button) findViewById(R.id.btn_1);
        btn_2 = (Button) findViewById(R.id.btn_2);
        btn_3 = (Button) findViewById(R.id.btn_3);
        btn_4 = (Button) findViewById(R.id.btn_4);
        btn_5 = (Button) findViewById(R.id.btn_5);
        btn_6 = (Button) findViewById(R.id.btn_6);
        btn_7 = (Button) findViewById(R.id.btn_7);
        btn_8 = (Button) findViewById(R.id.btn_8);
        btn_9 = (Button) findViewById(R.id.btn_9);
        btn_point = (Button) findViewById(R.id.btn_point);

        btn_clean = (Button) findViewById(R.id.btn_clean);
        btn_equal = (Button) findViewById(R.id.btn_equal);
        btn_del = (Button) findViewById(R.id.btn_del);

        btn_plus = (Button) findViewById(R.id.btn_plus);
        btn_minus = (Button) findViewById(R.id.btn_minus);
        btn_multiply = (Button) findViewById(R.id.btn_multiply);
        btn_divide = (Button) findViewById(R.id.btn_divide);

        btn_sqrt = (Button) findViewById(R.id.btn_sqrt);

        textView = (TextView) findViewById(R.id.textView);

        //注册监听器
        btn_0.setOnClickListener(this);
        btn_1.setOnClickListener(this);
        btn_2.setOnClickListener(this);
        btn_3.setOnClickListener(this);
        btn_4.setOnClickListener(this);
        btn_5.setOnClickListener(this);
        btn_6.setOnClickListener(this);
        btn_7.setOnClickListener(this);
        btn_8.setOnClickListener(this);
        btn_9.setOnClickListener(this);
        btn_equal.setOnClickListener(this);
        btn_minus.setOnClickListener(this);
        btn_multiply.setOnClickListener(this);
        btn_divide.setOnClickListener(this);
        btn_sqrt.setOnClickListener(this);
        btn_del.setOnClickListener(this);
        btn_point.setOnClickListener(this);
        btn_plus.setOnClickListener(this);
        btn_clean.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        String str=textView.getText().toString();
        switch (v.getId()){
            //清空与删除
            case R.id.btn_clean:
                clear_flag=true;
                textView.setText("0");
                operator="";
                firstNumber="";
                break;
            case R.id.btn_del:
                if(!clear_flag){
                    if(str.length()==1){
                        clear_flag=true;
                        textView.setText("0");
                    }
                    else
                        textView.setText(str.substring(0, str.length() - 1));
                }
                break;

            //数字键
            case R.id.btn_0:
                if(!clear_flag)
                    textView.setText(str+((Button) v).getText());
                break;
            case R.id.btn_1:
            case R.id.btn_2:
            case R.id.btn_3:
            case R.id.btn_4:
            case R.id.btn_5:
            case R.id.btn_6:
            case R.id.btn_7:
            case R.id.btn_8:
            case R.id.btn_9:
                if(clear_flag){
                    clear_flag=false;
                    textView.setText(((Button) v).getText());
                }
                else
                    textView.setText(str+((Button) v).getText());
                break;
            case R.id.btn_point:
                if(!str.contains(".")){
                    clear_flag=false;
                    textView.setText(str+((Button) v).getText());
                }
                else if(str.contains("+")||str.contains("-")||str.contains("*")||str.contains("/")){
                    textView.setText(str+((Button) v).getText());
                }
                break;
            //计算键
            case R.id.btn_plus:
            case R.id.btn_minus:
            case R.id.btn_multiply:
            case R.id.btn_divide:
                if(operator.equals("")||operator.equals("=")){
                    firstNumber=str;
                    textView.setText(firstNumber+((Button) v).getText());
                    operator=((Button) v).getText().toString();
                    clear_flag=false;
                }
                else{
                    firstNumber=Float.toString(calculate(firstNumber,str,operator));
                    textView.setText(firstNumber+((Button) v).getText());
                    clear_flag=false;
                    operator=((Button) v).getText().toString();
                }
                break;
            case R.id.btn_sqrt:
                textView.setText(String.valueOf(Math.sqrt(Double.parseDouble(str))));
                clear_flag=true;
                break;
            case R.id.btn_equal:
                if(operator.equals("="))
                    textView.setText(str);
                else if(firstNumber.equals(""))
                    textView.setText("0");
                else{
                    textView.setText(Float.toString(calculate(firstNumber,str,operator)));
                    clear_flag=true;
                    operator="=";
                }
                break;
        }
    }

    private float calculate(String firstNumber,String secondNumber,String operator){
              float first=Float.parseFloat(firstNumber);
              float second=Float.parseFloat(secondNumber.substring((secondNumber.indexOf(operator)+1),secondNumber.length()));
              float value;
              char opera=operator.toCharArray()[0];
              switch (opera){
                  case '+':
                      value=first+second;
                      break;
                  case '-':
                      value=first-second;
                      break;
                  case '*':
                      value=first*second;
                      break;
                  case '/':
                      if(second==0){
                          value=0;
                      }
                      else{
                          value=first/second;
                      }
                      break;
                   default:
                       value=0;
              }
              return value;
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="4">

    <TextView
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:layout_gravity="center_horizontal"
        android:text="计算器"
        android:textSize="20dip" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:layout_columnSpan="4"
        android:text="0"
        android:textAlignment="textEnd"
        android:textSize="35dip" />

    <Button
        android:id="@+id/btn_clean"
        android:layout_width="144dp"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="C"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_del"
        android:layout_width="131dp"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="DEL"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_sqrt"
        android:layout_width="152dp"
        android:layout_height="wrap_content"
        android:layout_row="0"
        android:text="√"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_plus"
        android:layout_width="131dp"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="+"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="1"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="2"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="3"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_minus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="-"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_4"
        android:layout_width="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="4"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="5"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="6"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_multiply"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="*"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="7"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="8"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="9"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_equal"
        android:layout_width="152dp"
        android:layout_height="96dp"
        android:layout_rowSpan="2"
        android:text="="
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_point"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="."
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="0"
        android:textSize="20dip" />

    <Button
        android:id="@+id/btn_divide"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:text="/"
        android:textSize="20dip" />


</GridLayout>

 

相关标签: Andriod