帮我在android studio用java语言写计算器
时间: 2023-07-28 12:36:40 浏览: 106
好的,下面是一个简单的计算器的实现示例:
首先,在 layout 文件夹下新建一个布局文件 calculator_layout.xml,代码如下:
```
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout_calculator"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<!-- 显示计算结果的 TextView -->
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:background="@android:color/darker_gray"
android:gravity="end"
android:textColor="@android:color/white"
android:textSize="24sp" />
<!-- 数字和运算符的按键 -->
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="4"
android:rowCount="5"
android:layout_margin="16dp">
<Button
android:id="@+id/btn_clear"
android:layout_columnSpan="2"
android:layout_gravity="fill"
android:text="C" />
<Button
android:id="@+id/btn_del"
android:text="DEL" />
<Button
android:id="@+id/btn_div"
android:text="/" />
<Button
android:id="@+id/btn_mul"
android:text="*" />
<Button
android:id="@+id/btn_sub"
android:text="-" />
<Button
android:id="@+id/btn_add"
android:text="+" />
<Button
android:id="@+id/btn_7"
android:text="7" />
<Button
android:id="@+id/btn_8"
android:text="8" />
<Button
android:id="@+id/btn_9"
android:text="9" />
<Button
android:id="@+id/btn_4"
android:text="4" />
<Button
android:id="@+id/btn_5"
android:text="5" />
<Button
android:id="@+id/btn_6"
android:text="6" />
<Button
android:id="@+id/btn_1"
android:text="1" />
<Button
android:id="@+id/btn_2"
android:text="2" />
<Button
android:id="@+id/btn_3"
android:text="3" />
<Button
android:id="@+id/btn_0"
android:layout_columnSpan="2"
android:text="0" />
<Button
android:id="@+id/btn_dot"
android:text="." />
<Button
android:id="@+id/btn_equal"
android:text="=" />
</GridLayout>
</LinearLayout>
```
然后,在 MainActivity.java 文件中实现计算器的逻辑,代码如下:
```
public class MainActivity extends AppCompatActivity {
private TextView mTvResult;
private StringBuilder mFormulaBuilder = new StringBuilder();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calculator_layout);
initView();
initListener();
}
private void initView() {
mTvResult = findViewById(R.id.tv_result);
}
private void initListener() {
findViewById(R.id.btn_0).setOnClickListener(v -> addNumber("0"));
findViewById(R.id.btn_1).setOnClickListener(v -> addNumber("1"));
findViewById(R.id.btn_2).setOnClickListener(v -> addNumber("2"));
findViewById(R.id.btn_3).setOnClickListener(v -> addNumber("3"));
findViewById(R.id.btn_4).setOnClickListener(v -> addNumber("4"));
findViewById(R.id.btn_5).setOnClickListener(v -> addNumber("5"));
findViewById(R.id.btn_6).setOnClickListener(v -> addNumber("6"));
findViewById(R.id.btn_7).setOnClickListener(v -> addNumber("7"));
findViewById(R.id.btn_8).setOnClickListener(v -> addNumber("8"));
findViewById(R.id.btn_9).setOnClickListener(v -> addNumber("9"));
findViewById(R.id.btn_dot).setOnClickListener(v -> addNumber("."));
findViewById(R.id.btn_add).setOnClickListener(v -> addOperator("+"));
findViewById(R.id.btn_sub).setOnClickListener(v -> addOperator("-"));
findViewById(R.id.btn_mul).setOnClickListener(v -> addOperator("*"));
findViewById(R.id.btn_div).setOnClickListener(v -> addOperator("/"));
findViewById(R.id.btn_clear).setOnClickListener(v -> clearFormula());
findViewById(R.id.btn_del).setOnClickListener(v -> deleteNumber());
findViewById(R.id.btn_equal).setOnClickListener(v -> calculateResult());
}
/**
* 添加数字
*/
private void addNumber(String num) {
mFormulaBuilder.append(num);
mTvResult.setText(mFormulaBuilder.toString());
}
/**
* 添加运算符
*/
private void addOperator(String operator) {
if (mFormulaBuilder.length() == 0) {
return;
}
char lastChar = mFormulaBuilder.charAt(mFormulaBuilder.length() - 1);
if (lastChar == '+' || lastChar == '-' || lastChar == '*' || lastChar == '/') {
// 如果最后一个字符已经是运算符了,则替换它
mFormulaBuilder.setCharAt(mFormulaBuilder.length() - 1, operator.charAt(0));
} else {
mFormulaBuilder.append(operator);
}
mTvResult.setText(mFormulaBuilder.toString());
}
/**
* 清空公式
*/
private void clearFormula() {
mFormulaBuilder.delete(0, mFormulaBuilder.length());
mTvResult.setText("");
}
/**
* 删除最后一个数字或运算符
*/
private void deleteNumber() {
if (mFormulaBuilder.length() > 0) {
mFormulaBuilder.deleteCharAt(mFormulaBuilder.length() - 1);
mTvResult.setText(mFormulaBuilder.toString());
}
}
/**
* 计算结果
*/
private void calculateResult() {
if (mFormulaBuilder.length() == 0) {
return;
}
try {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval(mFormulaBuilder.toString());
mTvResult.setText(result.toString());
mFormulaBuilder.delete(0, mFormulaBuilder.length());
mFormulaBuilder.append(result.toString());
} catch (ScriptException e) {
e.printStackTrace();
}
}
}
```
这样,一个简单的计算器就完成了。你可以运行这个项目,点击按键测试它的功能。
阅读全文