这个的完整代码也请给出,在activity_main.xml文件中添加一个TextView用于显示计算结果和一些Button用于输入数字和运算符。
时间: 2024-05-04 21:21:15 浏览: 154
好的,以下是一个简单的计算器的完整代码:
MainActivity.java
```java
import androidx.appcompat.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 {
private TextView resultTextView;
private Button clearButton, divideButton, multiplyButton, backButton, sevenButton, eightButton, nineButton, minusButton, fourButton, fiveButton, sixButton, plusButton, oneButton, twoButton, threeButton, equalsButton, zeroButton, dotButton;
private StringBuilder calculationString = new StringBuilder();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Find views by ID
resultTextView = findViewById(R.id.result_text_view);
clearButton = findViewById(R.id.clear_button);
divideButton = findViewById(R.id.divide_button);
multiplyButton = findViewById(R.id.multiply_button);
backButton = findViewById(R.id.back_button);
sevenButton = findViewById(R.id.seven_button);
eightButton = findViewById(R.id.eight_button);
nineButton = findViewById(R.id.nine_button);
minusButton = findViewById(R.id.minus_button);
fourButton = findViewById(R.id.four_button);
fiveButton = findViewById(R.id.five_button);
sixButton = findViewById(R.id.six_button);
plusButton = findViewById(R.id.plus_button);
oneButton = findViewById(R.id.one_button);
twoButton = findViewById(R.id.two_button);
threeButton = findViewById(R.id.three_button);
equalsButton = findViewById(R.id.equals_button);
zeroButton = findViewById(R.id.zero_button);
dotButton = findViewById(R.id.dot_button);
// Set OnClickListeners for buttons
clearButton.setOnClickListener(this);
divideButton.setOnClickListener(this);
multiplyButton.setOnClickListener(this);
backButton.setOnClickListener(this);
sevenButton.setOnClickListener(this);
eightButton.setOnClickListener(this);
nineButton.setOnClickListener(this);
minusButton.setOnClickListener(this);
fourButton.setOnClickListener(this);
fiveButton.setOnClickListener(this);
sixButton.setOnClickListener(this);
plusButton.setOnClickListener(this);
oneButton.setOnClickListener(this);
twoButton.setOnClickListener(this);
threeButton.setOnClickListener(this);
equalsButton.setOnClickListener(this);
zeroButton.setOnClickListener(this);
dotButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.clear_button:
calculationString.setLength(0);
resultTextView.setText("");
break;
case R.id.divide_button:
appendToCalculationString("/");
break;
case R.id.multiply_button:
appendToCalculationString("*");
break;
case R.id.back_button:
if (calculationString.length() > 0) {
calculationString.deleteCharAt(calculationString.length() - 1);
resultTextView.setText(calculationString.toString());
}
break;
case R.id.seven_button:
appendToCalculationString("7");
break;
case R.id.eight_button:
appendToCalculationString("8");
break;
case R.id.nine_button:
appendToCalculationString("9");
break;
case R.id.minus_button:
appendToCalculationString("-");
break;
case R.id.four_button:
appendToCalculationString("4");
break;
case R.id.five_button:
appendToCalculationString("5");
break;
case R.id.six_button:
appendToCalculationString("6");
break;
case R.id.plus_button:
appendToCalculationString("+");
break;
case R.id.one_button:
appendToCalculationString("1");
break;
case R.id.two_button:
appendToCalculationString("2");
break;
case R.id.three_button:
appendToCalculationString("3");
break;
case R.id.equals_button:
evaluateCalculationString();
break;
case R.id.zero_button:
appendToCalculationString("0");
break;
case R.id.dot_button:
appendToCalculationString(".");
break;
}
}
private void appendToCalculationString(String str) {
calculationString.append(str);
resultTextView.setText(calculationString.toString());
}
private void evaluateCalculationString() {
try {
double result = eval(calculationString.toString());
resultTextView.setText(Double.toString(result));
calculationString.setLength(0);
calculationString.append(Double.toString(result));
} catch (Exception e) {
resultTextView.setText("Error");
calculationString.setLength(0);
}
}
public static double eval(final String str) {
return new Object() {
int pos = -1, ch;
void nextChar() {
ch = (++pos < str.length()) ? str.charAt(pos) : -1;
}
boolean skip(char charToSkip) {
while (ch == ' ') nextChar();
if (ch == charToSkip) {
nextChar();
return true;
}
return false;
}
double parse() {
nextChar();
double x = parseExpression();
if (pos < str.length()) throw new RuntimeException("Unexpected: " + (char)ch);
return x;
}
double parseExpression() {
double x = parseTerm();
for (;;) {
if (skip('+')) x += parseTerm(); // addition
else if (skip('-')) x -= parseTerm(); // subtraction
else return x;
}
}
double parseTerm() {
double x = parseFactor();
for (;;) {
if (skip('*')) x *= parseFactor(); // multiplication
else if (skip('/')) x /= parseFactor(); // division
else return x;
}
}
double parseFactor() {
if (skip('+')) return parseFactor(); // unary plus
if (skip('-')) return -parseFactor(); // unary minus
double x;
int startPos = this.pos;
if (skip('(')) { // parentheses
x = parseExpression();
skip(')');
} else if ((ch >= '0' && ch <= '9') || ch == '.') { // numbers
while ((ch >= '0' && ch <= '9') || ch == '.') nextChar();
x = Double.parseDouble(str.substring(startPos, this.pos));
} else {
throw new RuntimeException("Unexpected: " + (char)ch);
}
if (skip('^')) x = Math.pow(x, parseFactor()); // exponentiation
return x;
}
}.parse();
}
}
```
activity_main.xml
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/result_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:gravity="end"
android:textSize="32sp"
android:textStyle="bold"
android:textColor="@android:color/black" />
<Button
android:id="@+id/clear_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="C"
android:textSize="24sp" />
<Button
android:id="@+id/divide_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="/"
android:textSize="24sp" />
<Button
android:id="@+id/multiply_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="*"
android:textSize="24sp" />
<Button
android:id="@+id/back_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="←"
android:textSize="24sp" />
<Button
android:id="@+id/seven_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="7"
android:textSize="24sp" />
<Button
android:id="@+id/eight_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="8"
android:textSize="24sp" />
<Button
android:id="@+id/nine_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="9"
android:textSize="24sp" />
<Button
android:id="@+id/minus_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="-"
android:textSize="24sp" />
<Button
android:id="@+id/four_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="4"
android:textSize="24sp" />
<Button
android:id="@+id/five_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="5"
android:textSize="24sp" />
<Button
android:id="@+id/six_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="6"
android:textSize="24sp" />
<Button
android:id="@+id/plus_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="+"
android:textSize="24sp" />
<Button
android:id="@+id/one_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="1"
android:textSize="24sp" />
<Button
android:id="@+id/two_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="2"
android:textSize="24sp" />
<Button
android:id="@+id/three_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="3"
android:textSize="24sp" />
<Button
android:id="@+id/equals_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="="
android:textSize="24sp" />
<Button
android:id="@+id/zero_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="2"
android:text="0"
android:textSize="24sp" />
<Button
android:id="@+id/dot_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="."
android:textSize="24sp" />
<View
android:id="@+id/view1"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorPrimaryDark"
android:layout_below="@+id/result_text_view"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_below="@+id/view1"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/sin_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="sin"
android:textSize="24sp" />
<Button
android:id="@+id/cos_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="cos"
android:textSize="24sp" />
<Button
android:id="@+id/tan_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="tan"
android:textSize="24sp" />
<Button
android:id="@+id/ln_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="ln"
android:textSize="24sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/sqrt_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="√"
android:textSize="24sp" />
<Button
android:id="@+id/cbrt_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="3√"
android:textSize="24sp" />
<Button
android:id="@+id/x2_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="x²"
android:textSize="24sp" />
<Button
android:id="@+id/x3_button"
android:layout_width="0dp"
android:layout_height="64dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:text="x³"
android:textSize="24sp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
```
这个计算器还支持一些科学计算功能,例如 sin、cos、tan、ln、平方根、立方根等。
阅读全文