• android之计算器


    xml布局:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffffff"
        android:orientation="vertical" >
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal" >
            <EditText
                android:id="@+id/show"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginTop="10dp"
                android:editable="false"
                android:gravity="right"
                android:hint="@string/class3_1" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_marginBottom="15dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="10dp"
            android:layout_weight="6"
            android:orientation="vertical" >
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="3"
                android:orientation="vertical" >
                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1" >
                    <Button
                        android:id="@+id/bt_c"
                        android:layout_width="0dp"
                        android:layout_height="fill_parent"
                        android:layout_weight="1"
                        android:text="C" />
                    <Button
                        android:id="@+id/bt_del"
                        android:layout_width="0dp"
                        android:layout_height="fill_parent"
                        android:layout_weight="1"
                        android:text="DEL" />
                    <Button
                        android:id="@+id/bt_d"
                        android:layout_width="0dp"
                        android:layout_height="fill_parent"
                        android:layout_weight="1"
                        android:text="÷" />
                    <Button
                        android:id="@+id/bt_m"
                        android:layout_width="0dp"
                        android:layout_height="fill_parent"
                        android:layout_weight="1"
                        android:text="×" />
                </LinearLayout>
                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1" >
                    <Button
                        android:id="@+id/bt_7"
                        android:layout_width="0dp"
                        android:layout_height="fill_parent"
                        android:layout_weight="1"
                        android:text="7" />
                    <Button
                        android:id="@+id/bt_8"
                        android:layout_width="0dp"
                        android:layout_height="fill_parent"
                        android:layout_weight="1"
                        android:text="8" />
                    <Button
                        android:id="@+id/bt_9"
                        android:layout_width="0dp"
                        android:layout_height="fill_parent"
                        android:layout_weight="1"
                        android:text="9" />
                    <Button
                        android:id="@+id/bt_di"
                        android:layout_width="0dp"
                        android:layout_height="fill_parent"
                        android:layout_weight="1"
                        android:text="-" />
                </LinearLayout>
                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1" >
                    <Button
                        android:id="@+id/bt_4"
                        android:layout_width="0dp"
                        android:layout_height="fill_parent"
                        android:layout_weight="1"
                        android:text="4" />
                    <Button
                        android:id="@+id/bt_5"
                        android:layout_width="0dp"
                        android:layout_height="fill_parent"
                        android:layout_weight="1"
                        android:text="5" />
                    <Button
                        android:id="@+id/bt_6"
                        android:layout_width="0dp"
                        android:layout_height="fill_parent"
                        android:layout_weight="1"
                        android:text="6" />
                    <Button
                        android:id="@+id/bt_a"
                        android:layout_width="0dp"
                        android:layout_height="fill_parent"
                        android:layout_weight="1"
                        android:text="+" />
                </LinearLayout>
            </LinearLayout>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="2"
                android:orientation="horizontal" >
                <LinearLayout
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="3"
                    android:orientation="vertical" >
                    <LinearLayout
                        android:layout_width="fill_parent"
                        android:layout_height="0dp"
                        android:layout_weight="1"
                        android:orientation="horizontal" >
                        <Button
                            android:id="@+id/bt_1"
                            android:layout_width="0dp"
                            android:layout_height="fill_parent"
                            android:layout_weight="1"
                            android:text="1" />
                        <Button
                            android:id="@+id/bt_2"
                            android:layout_width="0dp"
                            android:layout_height="fill_parent"
                            android:layout_weight="1"
                            android:text="2" />
                        <Button
                            android:id="@+id/bt_3"
                            android:layout_width="0dp"
                            android:layout_height="fill_parent"
                            android:layout_weight="1"
                            android:text="3" />
                    </LinearLayout>
                    <LinearLayout
                        android:layout_width="fill_parent"
                        android:layout_height="0dp"
                        android:layout_weight="1"
                        android:orientation="horizontal" >
                        <Button
                            android:id="@+id/bt_0"
                            android:layout_width="0dp"
                            android:layout_height="fill_parent"
                            android:layout_weight="2"
                            android:text="0" />
                        <Button
                            android:id="@+id/bt_p"
                            android:layout_width="0dp"
                            android:layout_height="fill_parent"
                            android:layout_weight="1"
                            android:text="." />
                    </LinearLayout>
                </LinearLayout>
                <LinearLayout
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:orientation="vertical" >
                    <Button
                        android:id="@+id/bt_e"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:text="" />
                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>

    java 代码:

    package com.example.class3;
    import java.util.Stack;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import com.example.lesson.R;
    public class Activity3 extends Activity implements OnClickListener {
     private EditText show;
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.class3_1);
      show = (EditText) findViewById(R.id.show);
      /*
       * 数字键监听
       */
      findViewById(R.id.bt_0).setOnClickListener(this);
      findViewById(R.id.bt_1).setOnClickListener(this);
      findViewById(R.id.bt_2).setOnClickListener(this);
      findViewById(R.id.bt_3).setOnClickListener(this);
      findViewById(R.id.bt_4).setOnClickListener(this);
      findViewById(R.id.bt_5).setOnClickListener(this);
      findViewById(R.id.bt_6).setOnClickListener(this);
      findViewById(R.id.bt_7).setOnClickListener(this);
      findViewById(R.id.bt_8).setOnClickListener(this);
      findViewById(R.id.bt_9).setOnClickListener(this);
      /*
       * 功能键监听
       */
      findViewById(R.id.bt_c).setOnClickListener(this);
      findViewById(R.id.bt_p).setOnClickListener(this);
      findViewById(R.id.bt_del).setOnClickListener(this);
      findViewById(R.id.bt_e).setOnClickListener(this);
      /*
       * 运算符监听
       */
      findViewById(R.id.bt_di).setOnClickListener(this);
      findViewById(R.id.bt_d).setOnClickListener(this);
      findViewById(R.id.bt_a).setOnClickListener(this);
      findViewById(R.id.bt_m).setOnClickListener(this);
     }
     public void onClick(View view) {
      switch (view.getId()) {
      case R.id.bt_c:
       show.setText("");
       break;
      case R.id.bt_del:
       String text = show.getText().toString();
       text = (String) text.subSequence(0, text.length() - 1);
       show.setText(text);
       break;
      case R.id.bt_e:
       Calculate();
       break;
      default:
       Button button = (Button) findViewById(view.getId());
       show.setText(show.getText() + "" + button.getText());
       break;
      }
     }
     private void Calculate() {
      Stack<Double> num = new Stack<Double>();
      Stack<Character> operator = new Stack<Character>();
      char[] op = { '#', '+', '-', '×', '÷' };
      int[] rules = new int[256];
      String express = show.getText().toString();
      express += '#';
      rules[op[0]] = 0;
      rules[op[1]] = rules[op[2]] = 1;
      rules[op[3]] = rules[op[4]] = 2;
      operator.push('#');
      int i = 0, len = express.length();
      double value1 = 0, value2 = 0;
      double value = 0;
      boolean isNum = false;
      boolean firstNum = false;
      boolean isOver = false;
      boolean isZero = false;
      boolean isXiao = false;
      double index = 1;
      String ans = "";
      while (i < len) {
       char ch = express.charAt(i);
       if ((ch >= '0' && ch <= '9') || ch == '.') {
        if (ch == '.')
         isXiao = true;
        else {
         if (isXiao == true) {
          index *= 0.1;
          value2 = value2 + index * (ch - '0');
         } else
          value1 = value1 * 10 + ch - '0';
        }
        System.out.println("c = " + ch);
        System.out.print("value1 = " + value1);
        System.out.println("           value2 = " + value2);
        isNum = true;
       } else if (isNum == true) {
        value = value1 + value2;
        if (firstNum == true)
         value = -value;
        num.push(value);
        value1 = value2 = 0;
        index = 1;
        isXiao = firstNum = isNum = false;
        while (rules[ch] <= rules[operator.peek()]) {
         char c = operator.pop();
         if (c == '#') {
          isOver = true;
          break;
         }
         double num2 = num.pop();
         double num1 = num.pop();
         if (c == '÷' && num2 == 0) {
          isZero = true;
          break;
         }
         double v = calcu(num1, c, num2);
         num.push(v);
        }
        if (isOver == true || isZero == true)
         break;
        operator.push(ch);
       } else
        firstNum = true;
       i++;
      }
      if (isZero == true)
       ans = "表达式不成立(出现了除数为0的情况)";
      else
       ans = num.pop() + "";
      show.setText(express.substring(0, express.length() - 1) + " = "
        + ans);
     }
     private double calcu(double num1, char ch, double num2) {
      double ans = 0.0;
      switch (ch) {
      case '+':
       ans = num1 + num2;
       break;
      case '-':
       ans = num1 - num2;
       break;
      case '×':
       ans = num1 * num2;
       break;
      case '÷':
       ans = num1 / num2;
       break;
      default:
       break;
      }
      return ans;
     }
    }
  • 相关阅读:
    slot 的简单使用(一)匿名插槽
    修改Tooltip 文字提示 的背景色 箭头颜色
    解决vue/cli3.0 语法验证规则 ESLint: Expected indentation of 2 spaces but found 4. (indent)
    洛谷P2014 选课(树形DP+分组背包)
    洛谷P4316 绿豆蛙的归宿(概率DP/期望DP+拓扑排序)
    Atcoder Beginner Contest 144 F- Fork the Road(概率DP/期望DP)
    Atcoder ABC144 Gluttony(贪心+二分)
    洛谷P1352 没有上司的舞会(树形DP+记忆化)
    HDU2476 String painter(区间DP)
    POJ1651 Multiplication Puzzle(区间DP+记忆化搜索)
  • 原文地址:https://www.cnblogs.com/huaixiaohai2015/p/5918043.html
Copyright © 2020-2023  润新知