Android计算器(修改版)

package yy.android.calculate;
import java.math.BigDecimal;
import java.math.RoundingMode;


import PushAndPop.NumStack;
import PushAndPop.Symbol;
import PushAndPop.SymbolStack;


import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;


public class CalculateActivity extends Activity {
    private Button xAdd;
    private Button xSub;
    private Button xMult;
    private Button xDivid;
    private Button xCalculate;
    private Button xClear;
    private Button xPoint;
    private EditText xedit;
    private Button x1;
    private Button x2;
    private Button x3;
    private Button x4;
    private Button x5;
    private Button x6;
    private Button x7;
    private Button x8;
    private Button x9;
    private Button x0; 
    private Button xClearAll;
    NumStack numStack1;//数据栈1
    SymbolStack symbolStack1;//符号栈1
    NumStack numStack2;//数据栈2
    SymbolStack symbolStack2;//符号栈;
    private enum Flag {num, add, sub, mult, divid, empty, zero, point};//标志位
    boolean flagPoint = false; //小数点标志位
    boolean flagCalculate = false;//计算一次清一次零
    char[] calculateR;
    boolean flagCalculatePoint = false;
    int dianwei;
    //当前操作的标志位
    private Flag flag=Flag.empty;
    private String get;//获取Edittext当前内容
    private BigDecimal result;//计算结果
    private String sresult;//字符串结果
    
     //使用SharedPreferences 来储存与读取数据   
    SharedPreferences mShared = null;  
    public final static String SHARED_MAIN = "main";
    public final static String KEY_RESULT = "result"; 
    String init;//上一次的计算结果


    public void PushAndPop(String s){//使用两个栈实现队列形式存放数据和符号
        char[] mass = s.toCharArray();
        //System.out.println(mass.length);
        String n = new String("");
        numStack1 = new NumStack();
        symbolStack1 = new SymbolStack();
        numStack2 = new NumStack();
        symbolStack2 = new SymbolStack();
        for(int j = 0;j < mass.length;j++){
            //把数字和小数点连成一个数字
            if(Character.isDigit(mass[j])||mass[j]==46){
                n = n + mass[j];
            }
            else{//如果是符号的话,就把之前的数字压进栈中
                if(n.length() != 0){
                    numStack1.push(n);
                    n = new String("");//清 空
                }
                symbolStack1.push(mass[j]);//压符号
            }
            if(j == mass.length-1 && n.length()!=0){//压最后一个数据
                numStack1.push(n);
                n = new String("");
            }
        }
          //实现队列形式
          while(numStack1.countNum()>0)
            numStack2.push(numStack1.pop().getNum());
          while(symbolStack1.countSymbol()>0)
            symbolStack2.push(symbolStack1.pop().getSymbol()); 
    }//到此为止,numStack2,symbolStack2存放的是逆序的字符
    //计算结果
    public BigDecimal calculator(NumStack numStack,SymbolStack symbolStack){
        //当栈里剩最后一个数字时
        if(numStack.countNum() == 1){
            return new BigDecimal(numStack.pop().getNum());
        }//当栈剩最后一个符号时
        if(symbolStack.countSymbol() == 1){
            BigDecimal num11 = new BigDecimal(numStack.pop().getNum());
            BigDecimal num22 = new BigDecimal(numStack.pop().getNum());
            Symbol symbol11 = symbolStack.pop();
            char fuhao11 = symbol11.getSymbol();
            switch (fuhao11) {
            case '+':
                BigDecimal sum11 = num11.add(num22);                
                return sum11;
            case '-':
                BigDecimal sum22 = num11.subtract(num22);
                return sum22;
            case '×':
                BigDecimal sum33 = num11.multiply(num22);
                return sum33;
            case '÷':
                BigDecimal sum44 = num11.divide(num22,20,RoundingMode.HALF_UP);
                return sum44;
            }
            return new BigDecimal(0.0);
        }
        else{//栈里不止一个符号时
            Symbol symbol1 = symbolStack.pop();
            Symbol symbol2 = symbolStack.pop();
            char fuhao1 = symbol1.getSymbol();
            char fuhao2 = symbol2.getSymbol();
            //取优先级
            int symbolFlag1 = symbol1.getDegree();
            int symbolFlag2 = symbol2.getDegree();
            //当符号一比符号二高优先级时,直接算前两个数
            if(symbolFlag1 >= symbolFlag2){
                BigDecimal num1 = new BigDecimal(numStack.pop().getNum());
                BigDecimal num2 = new BigDecimal(numStack.pop().getNum());
                switch(fuhao1){
                case '+':
                    BigDecimal sum = num1.add(num2);
                    numStack.push(sum.toString());
                    break;
                case '-':
                    BigDecimal sum1 = num1.subtract(num2);
                    numStack.push(sum1.toString());
                    break;
                case '×':
                    BigDecimal sum3 = num1.multiply(num2) ;
                    numStack.push(sum3.toString());
                    break;
                case '÷':
                    BigDecimal sum4 = num1.divide(num2,20,RoundingMode.HALF_UP);
                    numStack.push(sum4.toString());
                    break;
                }
                //把符号二压回栈中,准备下一次出栈
                symbolStack.push(fuhao2);
                //继续调用计算方法
                return calculator(numStack,symbolStack);
            }
            else{//当符号二优先级高于符号一时,需要从数据栈中弹出3个数,算后两个的值
                //算完后要压回栈中
                BigDecimal num1 = new BigDecimal(numStack.pop().getNum());
                BigDecimal num2 = new BigDecimal(numStack.pop().getNum());
                BigDecimal num3 = new BigDecimal(numStack.pop().getNum());
                switch(fuhao2){
                case '+':
                    BigDecimal sum = num2.add(num3);
                    numStack.push(sum.toString());
                    break;
                case '-':
                    BigDecimal sum1 = num2.subtract(num3);
                    numStack.push(sum1.toString());
                    break;
                case '×':
                    BigDecimal sum3 = num2.multiply(num3) ;
                    numStack.push(sum3.toString());
                    break;
                case '÷':
                    BigDecimal sum4 = num2.divide(num3,20,RoundingMode.HALF_UP);
                    numStack.push(sum4.toString());
                    break;
                }
                numStack.push(num1.toString());//把数字一压回栈中
                symbolStack.push(fuhao1);//把符号一压回栈中
                return calculator(numStack, symbolStack);
            }
        }
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     xAdd = (Button)findViewById(R.id.Add);
     xSub = (Button)findViewById(R.id.Sub);
     xMult = (Button)findViewById(R.id.Mult);
     xDivid = (Button)findViewById(R.id.Divid);
     xedit = (EditText)findViewById(R.id.edit);
     xCalculate =(Button)findViewById(R.id.Calculate);
     xClear = (Button)findViewById(R.id.Clear);
     xPoint = (Button)findViewById(R.id.Point);
     x1 = (Button)findViewById(R.id.X1);
     x2 = (Button)findViewById(R.id.X2);
     x3 = (Button)findViewById(R.id.X3);
     x4 = (Button)findViewById(R.id.X4);
     x5 = (Button)findViewById(R.id.X5);
     x6 = (Button)findViewById(R.id.X6);
     x7 = (Button)findViewById(R.id.X7);
     x8 = (Button)findViewById(R.id.X8);
     x9 = (Button)findViewById(R.id.X9);
     x0 = (Button)findViewById(R.id.X0);
     xClearAll = (Button)findViewById(R.id.ClearAll);
     //取得SharedPreferences
     mShared = getSharedPreferences(SHARED_MAIN, this.MODE_PRIVATE);
     //通过键值取的之前保存的数据,如果没有则取得默认值"没有数据记录"
     String init = mShared.getString(KEY_RESULT, "没有数据记录"); 
     xedit.setHint("上次计算结果为 :"+init);//在EditText显示上次的计算结果


     xAdd.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
              get = xedit.getText().toString();
              if(get.isEmpty()) {//当在第一次输入时是符号是无效的
                  xedit.setText("");
                  return;
              }
              //连续输入操作符时 的处理
              if(flag==Flag.add||flag==Flag.sub||
                 flag==Flag.mult||flag==Flag.divid){
                  get = get.substring(0, get.length() - 1);
              }
              xedit.setText(get + "+");
              xedit.setSelection(get.length()+1);
              flag = Flag.add;
              flagPoint = false;//当有操作符出现后,小数点标志位复位
          }        
     });         
    
     xSub.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
              get = xedit.getText().toString();
              if(get.isEmpty()) {
                  xedit.setText("");
                  return;
              }
              if(flag==Flag.add||flag==Flag.sub||
                  flag==Flag.mult||flag==Flag.divid){
                       get = get.substring(0, get.length() - 1);
                   }
              xedit.setText(get + "-");
              xedit.setSelection(get.length()+1);
              flag = Flag.sub;
              flagPoint = false;
          }        
     });          
          
     xMult.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
              get = xedit.getText().toString();
              if(get.isEmpty()) {
                  xedit.setText("");
                  return;
              }
              if(flag==Flag.add||flag==Flag.sub||
                  flag==Flag.mult||flag==Flag.divid){
                       get = get.substring(0, get.length() - 1);
                   }
              xedit.setText(get + "×");
              xedit.setSelection(get.length()+1);
              flag = Flag.mult;
              flagPoint = false;
          }        
     });         
     
     xDivid.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
              get = xedit.getText().toString();
              if(get.isEmpty()) {
                  xedit.setText("");
                  return;
              }
              if(flag==Flag.add||flag==Flag.sub||
                  flag==Flag.mult||flag==Flag.divid){
                       get = get.substring(0, get.length() - 1);
                   }
              xedit.setText(get + "÷");
              xedit.setSelection(get.length()+1);
              flag = Flag.divid;
              flagPoint = false;
          }        
     });         
              
     x0.setOnClickListener(new OnClickListener() {
       public void onClick(View v) {
          //计算一次请一次零
           if(flagCalculate == true){
            xedit.setText("");
            flagCalculate = false;
           }
                get = xedit.getText().toString();
                 if(get.isEmpty()) {
                  flag = Flag.zero;
       //           flagList.add(flag);
                  xedit.setText("0");
                  xedit.setSelection(1);
                  return;
                 }
                 if(flag == Flag.zero) {
                     xedit.setText(get);
                     xedit.setSelection(get.length());
                     return;
                 }
              switch (flag) {
              case add:
              case sub:
              case mult:
              case divid:
                  flag = Flag.zero;
                  xedit.setText(get + "0");
                  xedit.setSelection(get.length()+1);
    //            flagList.add(flag);
                  break;
              case point:
              case num:
                  flag = Flag.num;                  
                  xedit.setText(get + "0");
                  xedit.setSelection(get.length()+1);
                  break;
              case zero:
              default:
                  break;
              }
             
        }
   });         
     


     x1.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
        if(flagCalculate == true){
        xedit.setText("");
        flagCalculate = false;
       }
           get = xedit.getText().toString();          
           if(get.isEmpty()) {
               xedit.setText("1");
               xedit.setSelection(1); //(设置当前光标,此时因为get为空)
               return;
           }
           if(flag == Flag.zero) {
               get = get.substring(0, get.length() -1);//当1前面是0时,覆盖
           }
            xedit.setText(get+"1");
            xedit.setSelection(get.length()+1); //(设置当前光标)
           flag = Flag.num;//设置数字标志位
         }
    });


     x2.setOnClickListener(new OnClickListener() {
             public void onClick(View v) {
            if(flagCalculate == true){
            xedit.setText("");
            flagCalculate = false;
           }
               get = xedit.getText().toString();          
               if(get.isEmpty()) {
                   xedit.setText("2");
                   xedit.setSelection(1);
                   return;
               }
               if(flag == Flag.zero) {
                   get = get.substring(0, get.length() - 1);
               }
                xedit.setText(get+"2");
                xedit.setSelection(get.length()+1); 
               flag = Flag.num;
             }
        });


     x3.setOnClickListener(new OnClickListener() {
             public void onClick(View v) {
            if(flagCalculate == true){
            xedit.setText("");
            flagCalculate = false;
           }
               get = xedit.getText().toString();          
               if(get.isEmpty()) {
                   xedit.setText("3");
                   xedit.setSelection(1);
                   return;
               }
               if(flag == Flag.zero) {
                   get = get.substring(0, get.length() -1);
               }
                xedit.setText(get+"3");
                xedit.setSelection(get.length()+1); 
               flag = Flag.num;
             }
        });
     x4.setOnClickListener(new OnClickListener() {
             public void onClick(View v) {
            if(flagCalculate == true){
            xedit.setText("");
            flagCalculate = false;
           }
               get = xedit.getText().toString();          
               if(get.isEmpty()) {
                   xedit.setText("4");
                   xedit.setSelection(1);
                   return;
               }
               if(flag == Flag.zero) {
                   get = get.substring(0, get.length() -1);
               }
                xedit.setText(get+"4");
                xedit.setSelection(get.length()+1); 
               flag = Flag.num;
             }
        });
     x5.setOnClickListener(new OnClickListener() {
             public void onClick(View v) {
            if(flagCalculate == true){
            xedit.setText("");
            flagCalculate = false;
           }
               get = xedit.getText().toString();          
               if(get.isEmpty()) {
                   xedit.setText("5");
                   xedit.setSelection(1);
                   return;
               }
               if(flag == Flag.zero) {
                   get = get.substring(0, get.length() -1);
               }
                xedit.setText(get+"5");
                xedit.setSelection(get.length()+1); 
               flag = Flag.num;
             }
        });
     
     x6.setOnClickListener(new OnClickListener() {
             public void onClick(View v) {
            if(flagCalculate == true){
            xedit.setText("");
            flagCalculate = false;
           }
               get = xedit.getText().toString();          
               if(get.isEmpty()) {
                   xedit.setText("6");
                   xedit.setSelection(1);
                   return;
               }
               if(flag == Flag.zero) {
                   get = get.substring(0, get.length() -1);
               }
                xedit.setText(get+"6");
                xedit.setSelection(get.length()+1); 
               flag = Flag.num;
             }
        });
     
     x7.setOnClickListener(new OnClickListener() {
             public void onClick(View v) {
            if(flagCalculate == true){
            xedit.setText("");
            flagCalculate = false;
           }
               get = xedit.getText().toString();          
               if(get.isEmpty()) {
                   xedit.setText("7");
                   xedit.setSelection(1);
                   return;
               }
               if(flag == Flag.zero) {
                   get = get.substring(0, get.length() -1);
               }
                xedit.setText(get+"7");
                xedit.setSelection(get.length()+1); 
               flag = Flag.num;
             }
        });
     
     x8.setOnClickListener(new OnClickListener() {
             public void onClick(View v) {
            if(flagCalculate == true){
            xedit.setText("");
            flagCalculate = false;
           }
               get = xedit.getText().toString();          
               if(get.isEmpty()) {
                   xedit.setText("8");
                   xedit.setSelection(1);
                   return;
               }
               if(flag == Flag.zero) {
                   get = get.substring(0, get.length() -1);
               }
                xedit.setText(get+"8");
                xedit.setSelection(get.length()+1); 
               flag = Flag.num;
             }
        });
     
     x9.setOnClickListener(new OnClickListener() {
             public void onClick(View v) {
            if(flagCalculate == true){
            xedit.setText("");
            flagCalculate = false;
           }
               get = xedit.getText().toString();          
               if(get.isEmpty()) {
                   xedit.setText("9");
                   xedit.setSelection(1);
                   return;
               }
               if(flag == Flag.zero) {
                   get = get.substring(0, get.length() -1);
               }
                xedit.setText(get+"9");
                xedit.setSelection(get.length()+1); 
               flag = Flag.num;
             }
        });
     


     xPoint.setOnClickListener(new OnClickListener() {
          public void onClick(View v) {
         if(flagCalculate == true){
          xedit.setText("");
          flagCalculate = false;
         }
               get = xedit.getText().toString();
               if(get.isEmpty()) {
                   flag = Flag.point;
                   flagPoint = true; 
                   xedit.setText(".");
                   xedit.setSelection(1);
                   return;
               }


                  if(flagPoint) {
                      xedit.setText(get);
                      xedit.setSelection(get.length());
                      return;
                  }
                  xedit.setText(get + ".");
                  xedit.setSelection(get.length() + 1);
               flag = Flag.point;
               flagPoint = true;
           }        
         });                 
        //单个清除      
     xClear.setOnClickListener(new OnClickListener() {
          public void onClick(View v) {
                get = xedit.getText().toString();
                if(get.isEmpty()) return;
               get = get.substring(0, get.length() - 1);
               xedit.setText(get);
               xedit.setSelection(get.length());//
           }        
     }); 
       //全清空
    xClearAll.setOnClickListener(new OnClickListener() {
              public void onClick(View v) {
                   xedit.setText("");
                   flag = Flag.empty;
                   flagPoint = false;
               }        
         });      
     
     
     xCalculate.setOnClickListener(new OnClickListener() {
          public void onClick(View v) {
          if(flag == Flag.add||flag == Flag.divid||flag == Flag.mult||flag == Flag.sub  ){
        xedit.setText("不合法运算!!!");
        flagCalculate = true;
        // xedit.setText("");
                 flag = Flag.empty;
                 flagPoint = false;
            return;
          }  
          flagCalculate = true;
               get = xedit.getText().toString();
               System.out.println(get);
               PushAndPop(get);//把数据押进栈里
               result = calculator(numStack2,symbolStack2);
               //System.out.println(result.toString());
               sresult = result.toString();
               calculateR = sresult.toCharArray();
               for(int i = 0;i < calculateR.length;i++){
              if(calculateR[i] == '.'){
              dianwei = i;
              System.out.println("dian:"+dianwei);
              for(int j = i + 1;j<calculateR.length;j++){
              if(calculateR[j] != '0'){
              System.out.println(j);
              flagCalculatePoint = true; 
              }
              }
              }
               }
               if(flagCalculatePoint){
                 xedit.setText(sresult);
                 Editor editor = mShared.edit();   
                 editor.putString(KEY_RESULT,sresult); 
                  //put完毕必需要commit()否则无法保存   
                 editor.commit(); 
                 flagCalculatePoint = false;
               }
               else{
            sresult = sresult.substring(0, dianwei);
             
            xedit.setText(sresult);
            System.out.println(sresult);
                 Editor editor = mShared.edit();   
                 editor.putString(KEY_RESULT,sresult); 
                  //put完毕必需要commit()否则无法保存   
                 editor.commit(); 
               }
           }        
     });    
    }
}


package yy.android.PushAndPop;

public class Num {
    private String s = new String();
    public Num(String s1){
        s = s1;
    }
    public String getNum(){
        return s;
    }
    public Num next;
}

package yy.android.PushAndPop;

public class NumList {
  private Num firstNum;
  public NumList(){
      firstNum = null;
  }
  public boolean isEmpty(){
      return(firstNum == null);
  }
  public void insertFirst(String s1){
      Num newNum = new Num(s1);
      newNum.next = firstNum;
      firstNum = newNum;
  }
  public Num deleteFirst(){
      Num temp = firstNum;
      firstNum = firstNum.next;
      return temp;
  }
}

package yy.android.PushAndPop;

public class NumStack {
  private NumList theNumList;
  private int countNum;
  public NumStack(){
      theNumList = new NumList();
      countNum = 0;
  }
  public void push(String s1){
      theNumList.insertFirst(s1);
      countNum++;
  }
  public Num pop(){
      countNum = countNum - 1;
      return theNumList.deleteFirst();
  }
  public boolean isEmpty(){
      return(theNumList.isEmpty());
  }
  public int countNum(){
      return countNum;
  }
}

package yy.android.PushAndPop;

public class Symbol {
  private char c;
  private int degree1;
  public Symbol(char c1){
      c = c1;
      if(c == '×'||c == '÷')
          degree1 = 2;
      else
          degree1 = 1;
  }
  public int getDegree(){
      return degree1;
  }
  public char getSymbol(){
      return c;
  }
  public Symbol next;
}

package yy.android.PushAndPop;

public class SymbolList {
  private  Symbol firstSymbol;
  public SymbolList(){
      firstSymbol = null;
  }
  public boolean isEmpty(){
      return(firstSymbol == null);
  }
  public void insertFirst(char c1){
      Symbol newSymbol = new Symbol(c1);
      newSymbol.next = firstSymbol;
      firstSymbol = newSymbol;
  }
  public Symbol deleteFirst(){
      Symbol temp = firstSymbol;
      firstSymbol = firstSymbol.next;
      return temp;
  }
}
package yy.android.PushAndPop;


public class SymbolStack {
  private SymbolList theSymbolList;
  private int countSymbol;
  public SymbolStack(){
      theSymbolList = new SymbolList();
      countSymbol = 0;
  }
  public void push(char c1){
      theSymbolList.insertFirst(c1);
      countSymbol++;
  }
  public Symbol pop(){
      countSymbol = countSymbol -1;
      return theSymbolList.deleteFirst();
  }
  public boolean isEmpty(){
      return(theSymbolList.isEmpty());
  }
  public int countSymbol(){
      return countSymbol;
  }
}

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, CalculateActivity!</string>
    <string name="app_name">CalFMR</string>
    <string name="calculate">计算器</string>
    <string name="X0">0</string>
    <string name="X1">1</string>    
    <string name="X2">2</string>
    <string name="X3">3</string>
    <string name="X4">4</string>
    <string name="X5">5</string>
    <string name="X6">6</string>
    <string name="X7">7</string>
    <string name="X8">8</string>
    <string name="X9">9</string>
    <string name="Add">+</string>
    <string name="Clear">C</string>
    <string name="ClearAll">ClrAll</string>
    <string name="Sub">-</string>
    <string name="Mult">×</string>
    <string name="Point">.</string>
    <string name="Divid">÷</string>
    <string name="Calculate">=</string>    
</resources>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background = "#404040"
    >
    <EditText
        android:id="@+id/edit"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dip"
        android:layout_marginBottom="10dip"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        ></EditText>     
    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:stretchColumns="0,1,2,3,4"
        >
        <TableRow>    
            <TextView
              android:layout_span="2"  
            />    <!--前两格置空  -->
            <Button
                android:id="@+id/Clear"
                android:text="@string/Clear"
            />
            <Button
                android:id="@+id/ClearAll"
                android:text="@string/ClearAll"
            />
        </TableRow>
        <TableRow>
            <Button
                android:id="@+id/X7"
                android:text="@string/X7"
                />
            <Button
                android:id="@+id/X8"
                android:text="@string/X8"
                />    
            <Button
                android:id="@+id/X9"
                android:text="@string/X9"
                />
            <Button
                android:text="@string/Add"
                android:id="@+id/Add"
                ></Button>        
            </TableRow>
        <TableRow>
            <Button
                android:text="@string/X4"
                android:id="@+id/X4"
                ></Button>
            <Button
                android:text="@string/X5"
                android:id="@+id/X5"
                ></Button>
            <Button
                android:text="@string/X6"
                android:id="@+id/X6"
                ></Button>
            <Button
                android:text="@string/Sub"
                android:id="@+id/Sub"
                ></Button>
        </TableRow>
        <TableRow>
            <Button
                android:id="@+id/X1"
                android:text="@string/X1"
            />
            <Button
                android:id="@+id/X2"
                android:text="@string/X2"
            />
            <Button
                android:id="@+id/X3"
                android:text="@string/X3"
            />
            <Button
                android:text="@string/Mult"
                android:id="@+id/Mult"
            ></Button>            
        </TableRow>
        <TableRow>
            <Button
                android:id="@+id/Point"
                android:text="@string/Point"
            />
            <Button
                android:id="@+id/X0"
                android:text="@string/X0"
            />
            <Button
                android:text="@string/Divid"
                android:id="@+id/Divid"
                ></Button>
            <Button
                android:text="@string/Calculate"
                android:id="@+id/Calculate"
                ></Button>            
        </TableRow>
            
        </TableLayout>
</LinearLayout>




### 回答1: Android Studio是一个用于开发Android应用程序的集成开发环境 (IDE)。如果您想在Android Studio中创建一个加法计算器,您需要了解Java语言并熟悉Android Studio的使用方法。您需要使用Android Studio来创建布局和编写代码来实现计算器的功能。 ### 回答2: Android Studio加法计算器是一款基于Android操作系统设计的软件,它具有简单易用、高效精准、兼容性强等特点,可以方便地进行加法计算,为用户提供快捷、准确、方便的计算服务。 在Android Studio中设计加法计算器,我们需要首先创建一个新的android工程,并添加相应的控件和逻辑代码,实现加法的计算功能。具体实现步骤如下: 1.进入Android Studio界面,在工具栏上选择“File”→“New”→“New Project”,此时会弹出“Create New Project”的向导窗口,按照向导来进行工程的创建。 2.在工程中添加一个EditText控件和一个Button控件,用于输入被加数和显示计算结果,以及进行计算操作。 3.在Java代码文件中编写加法计算的逻辑代码,具体实现为点击Button后获取EditText中的被加数和加数,进行加法计算并将结果显示在EditText中。 4.进行界面美化,可以为EditText和Button添加相应的样式,使计算器更加美观易用。 Android Studio加法计算器的实现过程不算太难,但需要学习一定的Android编程知识和技巧。同时,由于Android设备种类繁多,还需要兼容不同设备的不同分辨率、屏幕尺寸和系统版本。因此,在设计和开发过程中需要考虑到这些因素,以确保软件的性能和用户体验。最终,我们可以通过将软件发布到应用市场或通过其他渠道进行推广,使更多的用户使用我们的加法计算器,帮助他们解决数学计算问题。 ### 回答3: 我们可以使用Android Studio编写加法计算器。加法计算器无需与互联网连接,可以在本地设备上运行。这是一个可定制的计算器,允许修改界面和添加新的功能,使用户体验更顺畅。 首先,在Android Studio中创建一个新的项目,并为其命名为“Addition Calculator”或其他名字。创建后,我们需要将主界面设计为一个简单的计算器界面,包括数字键盘和按钮来执行加法操作,以及一个文本框来显示计算结果。 然后,我们需要为按键添加事件监听器,并编写这些监听器的代码。我们需要确保按键能按照正确的顺序被按下,并通过按钮上的数字来构建执行加法运算所需的数字。我们还需要编写代码来处理错误输入和清除计算器屏幕上的文本。 接下来,我们需要编写代码来执行加法运算。我们需要创建一个变量来存储两个要加的数字,并使用Java中的operator( + )来执行加法运算。然后,我们需要将结果更新到我们的文本框中,以便用户可以看到计算的结果。我们还可以添加错误检查以确保输入的数字不超出范围。 最后,为了使用户体验更加流畅,我们可以添加其他功能,如包括减法、乘法和除法,还可以添加历史记录功能,以保存以前的计算结果。 总之,使用Android Studio编写加法计算器是一项有趣而有用的任务。我们需要关注每个细节,创建一个专业而高效的应用程序,以帮助用户处理日常计算任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值