时人不识凌云木,直待凌云始道高。这篇文章主要讲述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>
j【android之计算器】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 = https://www.songbingjia.com/android/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 = https://www.songbingjia.com/android/value1 + value2;
if (firstNum == true)
value = https://www.songbingjia.com/android/-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;
}
}
推荐阅读
- Android自定义控件5--轮播图广告ViewPager基本实现
- jQuery如何使用ajaxSend()方法(代码示例)
- CSS如何使用类选择器.class(代码示例)
- Python如何使用运算符函数(详细指南|S2)
- jQuery如何使用:last选择器(代码示例)
- 如何实现斐波那契堆(–删除,提取最小值和减小键(Fibonacci Heap))
- 算法设计(如何检查两个相同的链表())
- SASS如何使用数值运算符(详细介绍和代码实例)
- PHP如何使用array_chunk()函数(代码示例)