android studio 制作没有优先级的计算器
时间: 2023-09-30 09:12:03 浏览: 88
以下是制作没有优先级的计算器的步骤:
1. 创建一个新的 Android Studio 项目,命名为 Calculator 或者其他你喜欢的名字。
2. 打开 activity_main.xml 文件,添加一个 TextView 和多个 Button 控件作为计算器的界面元素。你可以根据自己的喜好来布局这些控件。
3. 打开 MainActivity.java 文件,定义一个字符串变量来存储当前的表达式,并将其初始化为空字符串。同时,使用 findViewById() 方法获取 TextView 和 Button 控件的引用。
4. 为每个 Button 控件添加 onClickListener() 方法,当用户点击按钮时,向表达式字符串中添加相应的数字或运算符,并将表达式字符串显示在 TextView 控件中。
5. 添加一个等号 Button 控件,当用户点击等号时,解析表达式字符串并执行计算。你可以使用 String 类的 split() 方法将表达式字符串拆分成数字和运算符的数组,然后使用 for 循环逐个执行运算并更新结果。
6. 将计算结果显示在 TextView 控件中。
注意,这个计算器没有考虑运算符优先级和括号等高级特性,只能按照从左到右的顺序计算表达式。如果你想实现更高级的功能,可以参考其他计算器的实现方法,或者学习编写更复杂的算法。
相关问题
在android studio中制作没有优先级的计算器
制作一个简单的没有优先级的计算器可以分为以下几个步骤:
1. 创建一个新的Android项目。
2. 在布局文件中添加一个EditText来显示计算结果,以及多个Button来输入数字和运算符。
3. 在MainActivity中获取EditText和所有Button的引用,并为每个Button设置一个单击事件侦听器。
4. 在单击事件侦听器中获取Button的文本,将其附加到EditText的末尾,并根据需要执行运算。
5. 实现计算逻辑,当用户单击等号时计算EditText中的表达式并将结果显示在EditText中。
下面是一个简单的示例代码:
activity_main.xml:
```xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="0"
android:gravity="end"
android:textSize="24sp"
android:padding="16dp"/>
<LinearLayout
android:layout_below="@id/result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/num_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:layout_weight="1"/>
<Button
android:id="@+id/num_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"
android:layout_weight="1"/>
<Button
android:id="@+id/num_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3"
android:layout_weight="1"/>
<Button
android:id="@+id/op_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:layout_weight="1"/>
</LinearLayout>
<LinearLayout
android:layout_below="@id/num_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/num_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="4"
android:layout_weight="1"/>
<Button
android:id="@+id/num_5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5"
android:layout_weight="1"/>
<Button
android:id="@+id/num_6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="6"
android:layout_weight="1"/>
<Button
android:id="@+id/op_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-"
android:layout_weight="1"/>
</LinearLayout>
<LinearLayout
android:layout_below="@id/num_4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/num_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="7"
android:layout_weight="1"/>
<Button
android:id="@+id/num_8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="8"
android:layout_weight="1"/>
<Button
android:id="@+id/num_9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="9"
android:layout_weight="1"/>
<Button
android:id="@+id/op_mul"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="*"
android:layout_weight="1"/>
</LinearLayout>
<LinearLayout
android:layout_below="@id/num_7"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/op_clr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="C"
android:layout_weight="1"/>
<Button
android:id="@+id/num_0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:layout_weight="1"/>
<Button
android:id="@+id/op_eq"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="="
android:layout_weight="1"/>
<Button
android:id="@+id/op_div"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="/"
android:layout_weight="1"/>
</LinearLayout>
</RelativeLayout>
```
MainActivity.java:
```java
public class MainActivity extends AppCompatActivity {
private EditText result;
private Button num_0, num_1, num_2, num_3, num_4, num_5, num_6, num_7, num_8, num_9;
private Button op_add, op_sub, op_mul, op_div, op_clr, op_eq;
private boolean isNewOp = true;
private float num1 = 0, num2 = 0, resultValue = 0;
private String op = "+";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
result = findViewById(R.id.result);
num_0 = findViewById(R.id.num_0);
num_1 = findViewById(R.id.num_1);
num_2 = findViewById(R.id.num_2);
num_3 = findViewById(R.id.num_3);
num_4 = findViewById(R.id.num_4);
num_5 = findViewById(R.id.num_5);
num_6 = findViewById(R.id.num_6);
num_7 = findViewById(R.id.num_7);
num_8 = findViewById(R.id.num_8);
num_9 = findViewById(R.id.num_9);
op_add = findViewById(R.id.op_add);
op_sub = findViewById(R.id.op_sub);
op_mul = findViewById(R.id.op_mul);
op_div = findViewById(R.id.op_div);
op_clr = findViewById(R.id.op_clr);
op_eq = findViewById(R.id.op_eq);
View.OnClickListener numListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
String digit = ((Button)v).getText().toString();
if (isNewOp) {
result.setText(digit);
isNewOp = false;
} else {
result.append(digit);
}
}
};
num_0.setOnClickListener(numListener);
num_1.setOnClickListener(numListener);
num_2.setOnClickListener(numListener);
num_3.setOnClickListener(numListener);
num_4.setOnClickListener(numListener);
num_5.setOnClickListener(numListener);
num_6.setOnClickListener(numListener);
num_7.setOnClickListener(numListener);
num_8.setOnClickListener(numListener);
num_9.setOnClickListener(numListener);
View.OnClickListener opListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
String operator = ((Button)v).getText().toString();
if (!isNewOp) {
num2 = Float.parseFloat(result.getText().toString());
switch (op) {
case "+":
resultValue = num1 + num2;
break;
case "-":
resultValue = num1 - num2;
break;
case "*":
resultValue = num1 * num2;
break;
case "/":
resultValue = num1 / num2;
break;
}
result.setText(String.valueOf(resultValue));
num1 = resultValue;
op = operator;
}
isNewOp = true;
}
};
op_add.setOnClickListener(opListener);
op_sub.setOnClickListener(opListener);
op_mul.setOnClickListener(opListener);
op_div.setOnClickListener(opListener);
op_clr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText("");
isNewOp = true;
num1 = 0;
num2 = 0;
resultValue = 0;
op = "+";
}
});
op_eq.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isNewOp) {
num2 = Float.parseFloat(result.getText().toString());
switch (op) {
case "+":
resultValue = num1 + num2;
break;
case "-":
resultValue = num1 - num2;
break;
case "*":
resultValue = num1 * num2;
break;
case "/":
resultValue = num1 / num2;
break;
}
result.setText(String.valueOf(resultValue));
num1 = resultValue;
}
isNewOp = true;
}
});
}
}
```
这样就完成了一个简单的没有优先级的计算器。
在android studio中制作没有优先级的计算器,同时运算结果保留两位小数
下面是制作没有优先级的计算器,并将结果保留两位小数的代码。
首先,我们需要一个布局文件来设计计算器的界面。在res/layout文件夹下创建一个名为activity_main.xml的文件,并添加以下代码:
```
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:padding="8dp"
android:textSize="24sp"
android:textStyle="bold" />
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv_result"
android:columnCount="4"
android:rowCount="5">
<Button
android:id="@+id/btn_7"
android:layout_column="0"
android:layout_row="1"
android:text="7" />
<Button
android:id="@+id/btn_8"
android:layout_column="1"
android:layout_row="1"
android:text="8" />
<Button
android:id="@+id/btn_9"
android:layout_column="2"
android:layout_row="1"
android:text="9" />
<Button
android:id="@+id/btn_divide"
android:layout_column="3"
android:layout_row="1"
android:text="/" />
<Button
android:id="@+id/btn_4"
android:layout_column="0"
android:layout_row="2"
android:text="4" />
<Button
android:id="@+id/btn_5"
android:layout_column="1"
android:layout_row="2"
android:text="5" />
<Button
android:id="@+id/btn_6"
android:layout_column="2"
android:layout_row="2"
android:text="6" />
<Button
android:id="@+id/btn_multiply"
android:layout_column="3"
android:layout_row="2"
android:text="*" />
<Button
android:id="@+id/btn_1"
android:layout_column="0"
android:layout_row="3"
android:text="1" />
<Button
android:id="@+id/btn_2"
android:layout_column="1"
android:layout_row="3"
android:text="2" />
<Button
android:id="@+id/btn_3"
android:layout_column="2"
android:layout_row="3"
android:text="3" />
<Button
android:id="@+id/btn_subtract"
android:layout_column="3"
android:layout_row="3"
android:text="-" />
<Button
android:id="@+id/btn_0"
android:layout_column="0"
android:layout_row="4"
android:layout_columnSpan="2"
android:text="0" />
<Button
android:id="@+id/btn_decimal"
android:layout_column="2"
android:layout_row="4"
android:text="." />
<Button
android:id="@+id/btn_add"
android:layout_column="3"
android:layout_row="4"
android:text="+" />
</GridLayout>
</RelativeLayout>
```
接下来,在MainActivity中设置按钮的点击事件,并编写计算逻辑的代码。在MainActivity中添加以下代码:
```
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView tvResult;
private StringBuilder input = new StringBuilder();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvResult = findViewById(R.id.tv_result);
findViewById(R.id.btn_0).setOnClickListener(this);
findViewById(R.id.btn_1).setOnClickListener(this);
findViewById(R.id.btn_2).setOnClickListener(this);
findViewById(R.id.btn_3).setOnClickListener(this);
findViewById(R.id.btn_4).setOnClickListener(this);
findViewById(R.id.btn_5).setOnClickListener(this);
findViewById(R.id.btn_6).setOnClickListener(this);
findViewById(R.id.btn_7).setOnClickListener(this);
findViewById(R.id.btn_8).setOnClickListener(this);
findViewById(R.id.btn_9).setOnClickListener(this);
findViewById(R.id.btn_decimal).setOnClickListener(this);
findViewById(R.id.btn_add).setOnClickListener(this);
findViewById(R.id.btn_subtract).setOnClickListener(this);
findViewById(R.id.btn_multiply).setOnClickListener(this);
findViewById(R.id.btn_divide).setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_0:
input.append("0");
break;
case R.id.btn_1:
input.append("1");
break;
case R.id.btn_2:
input.append("2");
break;
case R.id.btn_3:
input.append("3");
break;
case R.id.btn_4:
input.append("4");
break;
case R.id.btn_5:
input.append("5");
break;
case R.id.btn_6:
input.append("6");
break;
case R.id.btn_7:
input.append("7");
break;
case R.id.btn_8:
input.append("8");
break;
case R.id.btn_9:
input.append("9");
break;
case R.id.btn_decimal:
if (input.length() == 0) {
input.append("0.");
} else if (!input.toString().contains(".")) {
input.append(".");
}
break;
case R.id.btn_add:
calculate();
input.append("+");
break;
case R.id.btn_subtract:
calculate();
input.append("-");
break;
case R.id.btn_multiply:
calculate();
input.append("*");
break;
case R.id.btn_divide:
calculate();
input.append("/");
break;
}
tvResult.setText(input.toString());
}
private void calculate() {
if (input.length() == 0) {
return;
}
String expression = input.toString();
if (expression.endsWith("+") || expression.endsWith("-") || expression.endsWith("*") || expression.endsWith("/")) {
return;
}
BigDecimal result = new BigDecimal(expression).setScale(2, RoundingMode.HALF_UP);
input.setLength(0);
input.append(result.toString());
}
}
```
这段代码中,我们使用了一个StringBuilder对象来存储用户输入的表达式,然后计算结果并将结果保留两位小数。我们还使用了BigDecimal类来进行精确计算,并使用setScale方法来指定精度。
现在,我们就可以在Android Studio中编译并运行这个应用程序了。
阅读全文