初学android,仅能实现一些较为简单的功能,下面代码能实现加减乘除和清除功能,但是不能实现多位数的计算。
界面布置activity_main.xml:
//网格布局,设置为6行4列
功能实现activity_main.java,主要实现按钮的监控功能和基本算法
package com.example.counter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private EditText txt1;
private Button del, bu11, bu12, bu13, bu14, bu21, bu22, bu23, bu24, bu31, bu32, bu33, bu34, bu41, bu42, bu43, bu44;
boolean clr_flag;//判断文本框是否清空
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//显示activity_main.xml定义的用户界面
txt1 = (EditText) findViewById(R.id.text1);
del = (Button) findViewById(R.id.delete);
bu11 = (Button) findViewById(R.id.but11);
bu12 = (Button) findViewById(R.id.but12);
bu13 = (Button) findViewById(R.id.but13);
bu14 = (Button) findViewById(R.id.but14);
bu21 = (Button) findViewById(R.id.but21);
bu22 = (Button) findViewById(R.id.but22);
bu23 = (Button) findViewById(R.id.but23);
bu24 = (Button) findViewById(R.id.but24);
bu31 = (Button) findViewById(R.id.but31);
bu32 = (Button) findViewById(R.id.but32);
bu33 = (Button) findViewById(R.id.but33);
bu34 = (Button) findViewById(R.id.but34);
bu41 = (Button) findViewById(R.id.but41);
bu42 = (Button) findViewById(R.id.but42);
bu43 = (Button) findViewById(R.id.but43);
bu44 = (Button) findViewById(R.id.but44);//与用户界面程序中的组件建立关联
del.setOnClickListener(new click());
bu11.setOnClickListener(new click());
bu12.setOnClickListener(new click());
bu13.setOnClickListener(new click());
bu14.setOnClickListener(new click());
bu21.setOnClickListener(new click());
bu22.setOnClickListener(new click());
bu23.setOnClickListener(new click());
bu24.setOnClickListener(new click());
bu31.setOnClickListener(new click());
bu32.setOnClickListener(new click());
bu33.setOnClickListener(new click());
bu34.setOnClickListener(new click());
bu41.setOnClickListener(new click());
bu42.setOnClickListener(new click());
bu43.setOnClickListener(new click());
bu44.setOnClickListener(new click());//注册监听接口
}
class click implements View.OnClickListener{
public void onClick(View v) {
String str = txt1.getText().toString();
switch (v.getId()) {
case R.id.but11:
case R.id.but12:
case R.id.but13:
case R.id.but21:
case R.id.but22:
case R.id.but23:
case R.id.but31:
case R.id.but32:
case R.id.but33:
case R.id.but42:
if (clr_flag) {
clr_flag = false;
str = "";
txt1.setText("");
}
txt1.setText(str + ((Button) v).getText());
break;
case R.id.but14:
case R.id.but24:
case R.id.but34:
case R.id.but44:
if (clr_flag) {
clr_flag = false;
str = "";
txt1.setText("");
}
if (str.contains("+") || str.contains("-") || str.contains("*") || str.contains("/")) {
str = str.substring(0, str.indexOf(" "));//如果文本框中包含算法符号,则将其删除
}
txt1.setText(str + " " + ((Button) v).getText() + " ");
break;
case R.id.delete:
if (clr_flag) {
clr_flag = false;
str = "";
txt1.setText("");
} else if (str != null && !str.equals("")) {
txt1.setText(str.substring(0, str.length() - 1));//如果字符串不为空并且不包含空格,则删去文本框的最后一个字符
}
break;
case R.id.but43:
getResult();
break;
}
}
private void getResult()//等式算法
{
String exp=txt1.getText().toString();
if(exp==null||exp.equals(""))//文本框没有数字
return;
if(!exp.contains("")){//文本框只有数字
return;
}
if (clr_flag) {
clr_flag = false;
return;
}
clr_flag=true;
String s1=exp.substring(0,exp.indexOf(" "));//得到第一个数字
String op=exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2);//得到算法符号
String s2=exp.substring(exp.indexOf(" ")+3);//得到第二个数字
double cnt=0;
if(!s1.equals("")&&!s2.equals("")) {//正常情况计算
double d1 = Double.parseDouble(s1);
double d2 = Double.parseDouble(s2);
if (op.equals("+")) {
cnt = d1 + d2;
}
if (op.equals("-")) {
cnt = d1 - d2;
}
if (op.equals("*")) {
cnt = d1 * d2;
}
if (op.equals("/")) {
if (d2 == 0) cnt = 0;
else cnt = d1 / d2;
}
if (!s1.contains(".") && !s2.contains(".") && !op.equals("/")) {
int res = (int) cnt;
txt1.setText(res + "");//没有小数点,输出整数
} else {
txt1.setText(cnt + "");//有小数点,输出double型
}
}
else if(s1.equals("")&&!s2.equals(".")) {//第一个数值为空,第二个数值为整数
double d2 = Double.parseDouble(s2);
if (op.equals("+")) {
cnt = d2;
}
if (op.equals("-")) {
cnt = 0 - d2;
}
if (op.equals("*")) {
cnt = 0;
}
if (op.equals("/")) {
cnt = 0;
}
if (!s2.contains(".")) {
int res = (int) cnt;
txt1.setText(res + " ");
} else {
txt1.setText(cnt + " ");
}
}
else {
txt1.setText("");//仅有算法符号,输出为空
}
}
}
}
android studio 编写容易产生闪退,可以新建项目,查看会不会闪退,如果app没问题,就是代码编写错误了,这个时候可以试着注释掉一些代码,找出有问题的代码修改。