简单安卓计算器(课后小作业)
实现了基本的加减乘除取余运算可以叠加运算
首先给计算器布局 用的是TableLayout TableRow布的局 主要是老师要求这么做的还可以线性布局
<Button
android:layout_weight="1"
android:id="@+id/btn_cl"
android:text="c"
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_del"
android:text="del"
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_remainder"
android:text="%"
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_divide"
android:text="/"
android:textSize="25dp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_weight="1"
android:id="@+id/btn_7"
android:text="7"
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_8"
android:text="8"
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_9"
android:text="9"
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_multiply"
android:text="*"
android:textSize="25dp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_weight="1"
android:id="@+id/btn_4"
android:text="4"
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_5"
android:text="5"
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_6"
android:text="6"
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_subtract"
android:text="-"
android:textSize="25dp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_weight="1"
android:id="@+id/btn_3"
android:text="3"
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_2"
android:text="2"
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_1"
android:text="1"
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_add"
android:text="+"
android:textSize="25dp" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_weight="1"
android:text=""
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_0"
android:text="0"
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_point"
android:text="."
android:textSize="25dp" />
<Button
android:layout_weight="1"
android:id="@+id/btn_equal"
android:text="="
android:textSize="25dp" />
</TableRow>
效果图如下:
仿照小米手机计算器UI设计的
在对CalculatorActivity.java进行编码
public class CalculatorActivity extends AppCompatActivity {
TextView textView;
int[] buttons = new int[]{R.id.btn_0,R.id.btn_1,R.id.btn_2,
R.id.btn_3,R.id.btn_4,R.id.btn_5
,R.id.btn_6,R.id.btn_7,R.id.btn_8,
R.id.btn_9,};//用来储存数字键
Button btnnum;
int result;
String str1="";
String str2="";
int num1,num2;
double dnum1,dnum2,dresult;//第一个数 第二个数
int flag=0;//12345 分别对应±*/% 如果是0就是第一次输入.
int isSecond=0;//是不是第一次输入之后
int isPoint=0;//是否是小数
int ispoint=0;//除法出完之后带的小数点
int isContinue=0;//是否在原基础上继续算数 默认是不继续
Button buttonadd;
Button buttonsubtract;
Button buttonmultiply;
Button buttondivide;
Button buttonremainder;
Button buttondel;
Button buttoncl;
Button buttonequal;
Button buttonpoint;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calculator_layout);
//初始化
flag=0;//默认是第一次输入
textView = (TextView)findViewById(R.id.tv);
buttonadd = (Button)findViewById(R.id.btn_add);
buttonsubtract = (Button)findViewById(R.id.btn_subtract);
buttonmultiply = (Button)findViewById(R.id.btn_multiply);
buttondivide = (Button)findViewById(R.id.btn_divide);
buttonremainder = (Button)findViewById(R.id.btn_remainder);
buttondel = (Button)findViewById(R.id.btn_del);
buttoncl = (Button)findViewById(R.id.btn_cl);
buttonequal = (Button)findViewById(R.id.btn_equal);
buttonpoint = (Button)findViewById(R.id.btn_point);
//给数字键进行声明并且设置监听
for (int i =0;i < buttons.length;i++){
btnnum = (Button)findViewById(buttons[i]);
//设置监听
btnnum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//判断是不是第一次输入
if (flag != 0){
str1 = "";
isSecond=1;
// str2=textView.getText().toString().trim();
}else {
str1 = textView.getText().toString().trim();
if (str1.equals("0")){
str1 = "";
}
}
if (isSecond==1){
//str2=textView.getText().toString().trim();
str2 =str2 + String.valueOf(((Button)view).getText());
// Toast.makeText(CalculatorActivity.this,"str2"+str2,Toast.LENGTH_SHORT).show();
textView.setText(str2);
}
else {
str1 = str1 + String.valueOf(((Button)view).getText());//获取输入的数字
// Toast.makeText(CalculatorActivity.this,"str1"+str1,Toast.LENGTH_SHORT).show();
textView.setText(str1);}
// flag = -1;//输入完成改变flag
}
});
//给+-*/%设置监听 flage 的数字代表要执行的操作
buttonadd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (str1.length()!=0){
if (isContinue==1|| ispoint==1){//ispoint==1 是为了除法之后获得str1要不然会获得前一个
textView.setText(str1);
str1=textView.getText().toString().trim();
// Toast.makeText(CalculatorActivity.this,"str"+str1,Toast.LENGTH_LONG).show();
}else{
str1 = textView.getText().toString().trim();
}
if (isPoint==-1|| ispoint==1){
dnum1 = Double.parseDouble(str1);
//Toast.makeText(CalculatorActivity.this,"str1"+dnum1,Toast.LENGTH_LONG).show();
//isPoint=0;
}else{
num1 = Integer.parseInt(str1);
}
flag = 1;
//fl=1;
}else {
Toast.makeText(CalculatorActivity.this,"首位不能是运算符",Toast.LENGTH_LONG).show();
}
// result = num1+num2;
/*String str = num1 +"+"+ num2+"="+result;
textView.setText(str);*/
}
});
buttonsubtract.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (str1.length()!=0){
if (isContinue==1|| ispoint==1){
textView.setText(str1);
str1=textView.getText().toString().trim();
}else{
str1 = textView.getText().toString().trim();
}
if (isPoint==-1|| ispoint==1){
dnum1 = Double.parseDouble(str1);
// isPoint=0;
}else{
num1 = Integer.parseInt(str1);
}
flag = 2;
}else {
Toast.makeText(CalculatorActivity.this,"首位不能是运算符",Toast.LENGTH_LONG).show();
}
}
});
buttonmultiply.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (str1.length()!=0){
if (isContinue==1|| ispoint==1){
textView.setText(str1);
str1=textView.getText().toString().trim();
}else{
str1 = textView.getText().toString().trim();
}
if (isPoint==-1|| ispoint==1){
dnum1 = Double.parseDouble(str1);
// isPoint=0;
}else{
num1 = Integer.parseInt(str1);
}
flag = 3;
}else {
Toast.makeText(CalculatorActivity.this,"首位不能是运算符",Toast.LENGTH_LONG).show();
}
}
});
buttondivide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (str1.length()!=0){
if (isContinue==1|| ispoint==1){
textView.setText(str1);
str1=textView.getText().toString().trim();
}else{
str1 = textView.getText().toString().trim();
}
if (isPoint==-1|| ispoint==1){
dnum1 = Double.parseDouble(str1);
// isPoint=0;
}else{
num1 = Integer.parseInt(str1);
}
flag = 4;
}else {
Toast.makeText(CalculatorActivity.this,"首位不能是运算符",Toast.LENGTH_LONG).show();
}
}
});
buttonremainder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(CalculatorActivity.this,"此功能有点问题",Toast.LENGTH_LONG).show();
if (str1.length()!=0){
if (isContinue==1|| ispoint==1){
textView.setText(str1);
str1=textView.getText().toString().trim();
// Toast.makeText(CalculatorActivity.this,str1,Toast.LENGTH_LONG).show();
}else{
str1 = textView.getText().toString().trim();
// Toast.makeText(CalculatorActivity.this,str1,Toast.LENGTH_LONG).show();
}
if (isPoint==-1|| ispoint==1){
dnum1 = Double.parseDouble(str1);
// isPoint=0;
}else{
num1 = Integer.parseInt(str1);
}
flag = 5;
}else {
Toast.makeText(CalculatorActivity.this,"首位不能是运算符",Toast.LENGTH_LONG).show();
}
}
});
buttonpoint.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(CalculatorActivity.this,"diandd",Toast.LENGTH_LONG).show();
if (str1.length()!=0 && !(str1.startsWith("."))||str2.length()!=0 && !(str2.startsWith("."))) {//小数点必须以数字开头
// Toast.makeText(CalculatorActivity.this,"小数点",Toast.LENGTH_LONG).show();
isPoint=-1;
if (isSecond==1){
str2 = str2 + ".";
textView.setText(str2);
// Toast.makeText(CalculatorActivity.this,"dian",Toast.LENGTH_LONG).show();
str2=textView.getText().toString().trim();
}else{
str1 = str1 + ".";
textView.setText(str1);
}
}
}
});
buttondel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (str1.length()!=0){
str1 = str1.substring(0,str1.length()-1);//截取前str1.length-1的个数 sub不包含最后一个
textView.setText(str1);
}
}
});
buttonequal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isPoint==-1 || ispoint==1){
if (isSecond==1){
dnum2 = Double.parseDouble(str2);
}
}else{
if (isSecond==1){
num2 = Integer.parseInt(str2);
}
}
String[] str = new String[5] ;
switch (flag){
case 1:if (isPoint==-1 || ispoint==1){
dresult = dnum1 + dnum2;
str[flag-1] = dnum1 +"+"+ dnum2+"="+dresult;
}else {
result = num1 + num2;
str[flag-1] = num1 +"+"+ num2+"="+result;
}
//textView.setText(str[flag]);
break;
case 2:if (isPoint==-1 || ispoint==1){
dresult = dnum1 - dnum2;
str[flag-1] = dnum1 +"-"+ dnum2+"="+dresult;
}else {
result = num1 - num2;
str[flag-1] = num1 +"-"+ num2+"="+result;
}
break;
case 3:if (isPoint==-1 || ispoint==1){
dresult = dnum1 * dnum2;
str[flag-1] = dnum1 +"*"+ dnum2+"="+dresult;
}else {
result = num1 * num2;
str[flag-1] = num1 +"*"+ num2+"="+result;
}
break;
case 4:if (num1!=0||dnum1!=0){
if (isPoint==-1 || ispoint==1){
dresult = dnum1 / dnum2;
str[flag-1] = dnum1 +"/"+ dnum2+"="+dresult;
}else {
ispoint=1;
dnum1=num1;
dnum2=num2;
dresult = dnum1 / dnum2;
str[flag-1] = dnum1 +"/"+ dnum2+"="+dresult;
}
}else {
Toast.makeText(CalculatorActivity.this,"除数不能为0哦!",Toast.LENGTH_LONG).show();
}
break;
case 5:if (isPoint==-1){
dresult = dnum1 % dnum2;
str[flag-1] = dnum1 +"%"+ dnum2+"="+dresult;
}else {
result = num1 % num2;
str[flag-1] = num1 +"%"+ num2+"="+result;
}
break;
/*case 5:/*if (isPoint==-1){
//a % b = a - (a / b) * b
dresult =dnum1 - (dnum1/dnum2)*dnum2;
str[flag-1] = dnum1 +"%"+ dnum2+"="+(dnum1 % dnum2);
}else {
result = num1 - (num1/num2)*num2;
str[flag-1] = num1 +"%"+ num2+"="+result;
}if (isPoint==-1){
dresult = dnum1 % dnum2;
str[flag-1] = dnum1 +"%"+ dnum2+"="+dresult;
}else {
result = num1 % num2;
str[flag-1] = num1 +"%"+ num2+"="+result;
}
break;*/
}
textView.setText(str[flag-1]);
//isPoint=0;
isSecond=0;
isContinue=1;
str2="";//第二个获得的数字设为空便于以后运算
//获取计算完之后的结果
str1="";
int i1 = str[flag - 1].lastIndexOf("=");
str1 = str[flag-1].substring(i1+1);
// Toast.makeText(CalculatorActivity.this,str1,Toast.LENGTH_LONG).show();
}
});
}
//设置清除按钮的监听
buttoncl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textView.setText("0");
str1 ="";
str2="";
num1=0;
num2=0;
result=0;
dnum1=0;
dnum2=0;
dresult=0;
flag=0;
isPoint=0;
isSecond=0;
ispoint=0;
}
});
}
}
运行结果如下:
基本功能都已经实现了 可能还一些小错误代码中还可能有一些多余的请见谅。
新人第一次发布有什么不对的地方请告知,下次一定改正 (ง •̀_•́)ง (*•̀ㅂ•́)و