用Android studio写一个计算器
时间: 2023-10-04 17:13:43 浏览: 68
好的,下面是一个简单的 Android Studio 计算器示例:
1. 创建一个新的 Android Studio 项目,选择 Empty Activity 模板。
2. 打开 activity_main.xml 文件,将布局设置为 GridLayout,并添加按钮。
```xml
<GridLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="4">
<Button
android:id="@+id/btn_clear"
android:text="C"
android:layout_row="0"
android:layout_column="0"
android:layout_columnSpan="2"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_back"
android:text="←"
android:layout_row="0"
android:layout_column="2"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_divide"
android:text="/"
android:layout_row="0"
android:layout_column="3"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_7"
android:text="7"
android:layout_row="1"
android:layout_column="0"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_8"
android:text="8"
android:layout_row="1"
android:layout_column="1"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_9"
android:text="9"
android:layout_row="1"
android:layout_column="2"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_multiply"
android:text="*"
android:layout_row="1"
android:layout_column="3"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_4"
android:text="4"
android:layout_row="2"
android:layout_column="0"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_5"
android:text="5"
android:layout_row="2"
android:layout_column="1"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_6"
android:text="6"
android:layout_row="2"
android:layout_column="2"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_subtract"
android:text="-"
android:layout_row="2"
android:layout_column="3"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_1"
android:text="1"
android:layout_row="3"
android:layout_column="0"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_2"
android:text="2"
android:layout_row="3"
android:layout_column="1"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_3"
android:text="3"
android:layout_row="3"
android:layout_column="2"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_add"
android:text="+"
android:layout_row="3"
android:layout_column="3"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_0"
android:text="0"
android:layout_row="4"
android:layout_column="0"
android:layout_columnSpan="2"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_dot"
android:text="."
android:layout_row="4"
android:layout_column="2"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
<Button
android:id="@+id/btn_equal"
android:text="="
android:layout_row="4"
android:layout_column="3"
android:layout_gravity="fill"
android:background="@drawable/button_bg"
android:textColor="@color/white"
android:textSize="24sp" />
</GridLayout>
```
3. 创建一个 Calculator 类,用于执行计算操作。
```java
public class Calculator {
public static double evaluate(String expression) {
try {
return new Object() {
int pos = -1, ch;
void nextChar() {
ch = (++pos < expression.length()) ? expression.charAt(pos) : -1;
}
boolean eat(int charToEat) {
while (ch == ' ') nextChar();
if (ch == charToEat) {
nextChar();
return true;
}
return false;
}
double parse() {
nextChar();
double x = parseExpression();
if (pos < expression.length()) throw new RuntimeException("Unexpected: " + (char)ch);
return x;
}
double parseExpression() {
double x = parseTerm();
for (;;) {
if (eat('+')) x += parseTerm(); // addition
else if (eat('-')) x -= parseTerm(); // subtraction
else return x;
}
}
double parseTerm() {
double x = parseFactor();
for (;;) {
if (eat('*')) x *= parseFactor(); // multiplication
else if (eat('/')) x /= parseFactor(); // division
else return x;
}
}
double parseFactor() {
if (eat('+')) return parseFactor(); // unary plus
if (eat('-')) return -parseFactor(); // unary minus
double x;
int startPos = this.pos;
if (eat('(')) { // parentheses
x = parseExpression();
eat(')');
} else if ((ch >= '0' && ch <= '9') || ch == '.') { // numbers
while ((ch >= '0' && ch <= '9') || ch == '.') nextChar();
x = Double.parseDouble(expression.substring(startPos, this.pos));
} else if (ch >= 'a' && ch <= 'z') { // functions
while (ch >= 'a' && ch <= 'z') nextChar();
String func = expression.substring(startPos, this.pos);
x = parseFactor();
if (func.equals("sqrt")) x = Math.sqrt(x);
else if (func.equals("sin")) x = Math.sin(Math.toRadians(x));
else if (func.equals("cos")) x = Math.cos(Math.toRadians(x));
else if (func.equals("tan")) x = Math.tan(Math.toRadians(x));
else throw new RuntimeException("Unknown function: " + func);
} else {
throw new RuntimeException("Unexpected: " + (char)ch);
}
if (eat('^')) x = Math.pow(x, parseFactor()); // exponentiation
return x;
}
}.parse();
} catch (Exception e) {
return Double.NaN;
}
}
}
```
4. 打开 MainActivity.java 文件,添加代码以处理按钮点击事件。
```java
public class MainActivity extends AppCompatActivity {
private TextView inputTextView;
private TextView outputTextView;
private String input = "";
private String output = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inputTextView = findViewById(R.id.text_input);
outputTextView = findViewById(R.id.text_output);
// 设置按钮点击事件
findViewById(R.id.btn_0).setOnClickListener(v -> appendInput("0"));
findViewById(R.id.btn_1).setOnClickListener(v -> appendInput("1"));
findViewById(R.id.btn_2).setOnClickListener(v -> appendInput("2"));
findViewById(R.id.btn_3).setOnClickListener(v -> appendInput("3"));
findViewById(R.id.btn_4).setOnClickListener(v -> appendInput("4"));
findViewById(R.id.btn_5).setOnClickListener(v -> appendInput("5"));
findViewById(R.id.btn_6).setOnClickListener(v -> appendInput("6"));
findViewById(R.id.btn_7).setOnClickListener(v -> appendInput("7"));
findViewById(R.id.btn_8).setOnClickListener(v -> appendInput("8"));
findViewById(R.id.btn_9).setOnClickListener(v -> appendInput("9"));
findViewById(R.id.btn_dot).setOnClickListener(v -> appendInput("."));
findViewById(R.id.btn_add).setOnClickListener(v -> appendInput("+"));
findViewById(R.id.btn_subtract).setOnClickListener(v -> appendInput("-"));
findViewById(R.id.btn_multiply).setOnClickListener(v -> appendInput("*"));
findViewById(R.id.btn_divide).setOnClickListener(v -> appendInput("/"));
findViewById(R.id.btn_back).setOnClickListener(v -> {
if (!input.isEmpty()) {
input = input.substring(0, input.length() - 1);
inputTextView.setText(input);
}
});
findViewById(R.id.btn_clear).setOnClickListener(v -> {
input = "";
output = "";
inputTextView.setText("");
outputTextView.setText("");
});
findViewById(R.id.btn_equal).setOnClickListener(v -> {
if (!input.isEmpty()) {
output = String.valueOf(Calculator.evaluate(input));
outputTextView.setText(output);
}
});
}
private void appendInput(String s) {
input += s;
inputTextView.setText(input);
}
}
```
5. 运行应用程序并测试计算器。
这是一个非常简单的计算器示例,您可以根据需要添加更多的功能和操作符。
阅读全文