Simple_Caculator
Mark一下
- 这个计算器
是按照输入时运算符的顺序计算的
即 1 + 2 * 3 的结果是 9
我参考了网上的一些简单计算器的设计代码,简单的程度是只能两个操作数进行运算
我想多个数运算,思路
- X + Y + Z,先算 X + Y = S
- 然后算 S + Z = Q,以此类推
然而忘记了考虑运算符的优先级
中缀表达式(基本的算法 有前中后,又叫波兰式 数据结构中讲到的)
- 反映 算法缺陷 需要加强
运行.
代码.
MainActivity.java
package com.example.simple_calculator;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private TextView textView;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.sc_textView);
editText = (EditText)findViewById(R.id.sc_textView_result);
}
public void onClick(View view) {
Button btn = (Button) view;
String content = textView.getText().toString();
switch (view.getId()) {
case R.id.sc_one:
case R.id.sc_two:
case R.id.sc_three:
case R.id.sc_four:
case R.id.sc_five:
case R.id.sc_six:
case R.id.sc_seven:
case R.id.sc_eight:
case R.id.sc_nine:
case R.id.sc_zero:
textView.setText(content + btn.getText());
content = textView.getText().toString();
if (!content.contains(" ") && !"".equals(content)) {
if ((Double.parseDouble(content) + 0) == 0) {
//防止多0存在
textView.setText(String.valueOf(0));
} else if (content.startsWith("0")) {
//防止非零数首位为0
textView.setText(content.substring(1, content.length()));
}
}
break;
case R.id.sc_point:
if(content.endsWith(" ")) {
Toast.makeText(this, "小数点前需要数字", Toast.LENGTH_SHORT).show();
break;
}
if (content.contains(".")) {
Toast.makeText(this, "已经有小数点了", Toast.LENGTH_SHORT).show();
break;
}
textView.setText(content + btn.getText());
break;
case R.id.sc_add:
case R.id.sc_minus:
case R.id.sc_multiply:
case R.id.sc_divide:
if(content.endsWith(" ")) {
Toast.makeText(this, "运算符之间需要有操作数", Toast.LENGTH_SHORT).show();
break;
}
textView.setText(content + " " + btn.getText() + " ");
break;
case R.id.sc_backspace:
if (!"".equals(content)) {
textView.setText(content.substring(0, content.length() - 1));
}
break;
case R.id.sc_clear:
textView.setText("");
break;
case