正文  软件开发 > 编程综合 >

我的第一个android应用程序——计算器

第一次接触android,一个小型计算器再也不知道啥原理把代码拷上了[java]package com.su.fun.calculator;椀洀瀀漀爀琀 android.app.A...

第一次接触android,一个小型计算器再也不知道啥原理把代码拷上了

[java]
package com.su.fun.calculator; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
/**
 * 
 * @author busy
 *
 */ 
public class Calculator extends Activity implements OnClickListener{ 
    //输入状态 true为覆盖输入 false为添加输入 
     private boolean editFlag=true; 
    //计算状态 true为进入计算 false为二元运算的替换 
     private boolean status=false; 
     //运算后的状态 
     private boolean equstatus=false; 
     //异常状态 
     private boolean ext=false; 
    //定义+ - * / 标示。 
     private final int ADD=1; 
     private final int SUB=2; 
     private final int MUL=3; 
     private final int DIV=4; 
     private final int DEF=-1;//default默认值 
    //对应数字按钮和小数点按钮。 
     private Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,bpoint; 
     //对应 + - * / 按钮。 
     private Button badd,bsub,bmul,bdiv; 
     //对应清零按钮和清空按钮。 
     private Button bc,bce; 
     //对应开方和百分比按钮。 
     private Button bsqrt,bper; 
     //对应倒数和正负数按钮。 
     private Button binv,bsign; 
     //对应等于按钮。 
     private Button bequ; 
     //对应回退按钮。 
     private Button bb; 
     //对应显示器。 
     private EditText value; 
     //结果。 
     private float result=0; 
     //操作数。 
     private float operand=0; 
     //正在进行的运算。 
     private int op=DEF; 
    
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        initControl();//初始化。 
    } 
    @Override 
    public void onClick(View v) { 
        if(v.getId()==R.id.bc)ext=false; 
        if(ext){             
            return; 
        } 
        switch (v.getId()) { 
        case R.id.b0: 
            addContent(0); 
            break; 
        case R.id.b1: 
            addContent(1); 
            break; 
        case R.id.b2: 
            addContent(2); 
            break; 
        case R.id.b3: 
            addContent(3); 
            break; 
        case R.id.b4: 
            addContent(4); 
            break; 
        case R.id.b5: 
            addContent(5); 
            break; 
        case R.id.b6: 
            addContent(6); 
            break; 
        case R.id.b7: 
            addContent(7); 
            break; 
        case R.id.b8: 
            addContent(8); 
            break; 
        case R.id.b9: 
            addContent(9); 
            break; 
        case R.id.bpoint://小数点 
            addPoint(); 
            break; 
        case R.id.bb://退格 
            backSpace(); 
            break; 
        case R.id.badd://'+' 
            saveResultBeforeCalculate(); 
            op=ADD; 
            break; 
        case R.id.bsub://'-' 
            saveResultBeforeCalculate(); 
            op=SUB; 
            break; 
        case R.id.bmul://'*' 
            saveResultBeforeCalculate(); 
            op=MUL; 
            break; 
        case R.id.bdiv://'/' 
            saveResultBeforeCalculate(); 
            op=DIV; 
            break; 
        case R.id.bequ://'=' 
            equstatus=true; 
            calculate(); 
            break; 
        case R.id.bsqrt: 
            sqrt(); 
            break; 
        case R.id.binv: 
            inv(); 
            break; 
        case R.id.bsign: 
            sign(); 
            break; 
        case R.id.bper: 
            per(); 
            break; 
        case R.id.bc: 
            crear(); 
            break; 
        case R.id.bce: 
            value.setText(0+""); 
            break; 
        default: 
            break; 
        } 
    }    
    private void crear() { 
        result=0;        
        op=DEF; 
        editFlag=false; 
        status=false; 
        value.setText(0+"");         
    } 
    /**
     *  result=result*0.01
     */ 
    private void per() { 
        editFlag=true; 
        float temp=getValueOfNow(); 
        temp*=0.01; 
        value.setText(Float.toString(temp)); 
    } 
    /**
     * result=-result
     */ 
    private void sign() { 
        editFlag=true; 
        float temp=getValueOfNow(); 
        temp=-temp; 
        value.setText(Float.toString(temp)); 
    } 
    /**
     * 当result=0时,result=0
     * 否则 result=1/result 
     */ 
    private void inv() { 
        editFlag=true; 
        float temp=getValueOfNow(); 
        temp=temp==0?0:1/temp; 
        value.setText(Float.toString(temp)); 
    } 
    /*
     * 当result<=0 时 result=result
     * 否则 result=sqrt(result)
     */ 
    private void sqrt() { 
        editFlag=true; 
        float temp=getValueOfNow(); 
        temp=temp>0?(float)Math.sqrt(temp):temp; 
        value.setText(Float.toString(temp)); 
    } 
    /**
     * 根据输入状态来决定覆盖或插入
     * @param c 输入的数字 0-9
     */ 
    private void addContent(int c){ 
        System.out.println(c); 
        status=true; 
        String string=getStringOfNow(); 
        if(string.trim().equals("0")||editFlag)string=String.valueOf(c);         
        else string=string+c; 
        editFlag=false; 
        value.setText(string); 
        inputStatus(); 
    } 
    /**
     * 输入小数点若已存在则不处理
     */ 
    private void addPoint(){ 
        String string=getStringOfNow(); 
        if(string.indexOf('.')==-1)value.setText(string+"."); 
        inputStatus(); 
    } 
    /**
     * 退格处理若只有一个字符怎清零 
     */ 
    private void backSpace(){ 
        String string=getStringOfNow(); 
        if(string.length()>1){ 
            value.setText(string.substring(0, string.length()-1)); 
        }else{ 
            value.setText("0"); 
        } 
        inputStatus(); 
    } 
    /**
     * 输入时判断其是否是计算状态,如是怎清空状态。
     */ 
    private void inputStatus(){ 
        operand=getValueOfNow(); 
        if(equstatus){ 
            result=operand; 
            op=DEF; 
            equstatus=false; 
        } 
    } 
    //计算前一次运算 
    private void calculate(){ 
        editFlag=true; 
        status=false; 
        switch (op) { 
            case ADD: 
                result+=operand; 
                break; 
            case SUB: 
                result-=operand; 
                break; 
            case MUL: 
                result*=operand; 
                break; 
            case DIV: 
                if(operand==0){ 
                    value.setText("不能除0"); 
                    return; 
                } 
                result/=operand; 
                break; 
            default: 
                result=getValueOfNow(); 
                break; 
        } 
        value.setText(Float.toString(result)); 
    } 
   //(+ - * /)之前存入结果 www.2cto.com  
    private void saveResultBeforeCalculate(){ 
        editFlag=true; 
        if(status)calculate(); 
        else result=getValueOfNow(); 
    } 
     
    /**
     * 按钮的初始化和事件的注册。
     */ 
    private void initControl() { 
            b1=(Button)findViewById(R.id.b1); 
            b2=(Button)findViewById(R.id.b2); 
            b3=(Button)findViewById(R.id.b3); 
            b4=(Button)findViewById(R.id.b4); 
            b5=(Button)findViewById(R.id.b5); 
            b6=(Button)findViewById(R.id.b6); 
            b7=(Button)findViewById(R.id.b7); 
            b8=(Button)findViewById(R.id.b8); 
            b9=(Button)findViewById(R.id.b9); 
            b0=(Button)findViewById(R.id.b0); 
            bpoint=(Button)findViewById(R.id.bpoint); 
            badd=(Button)findViewById(R.id.badd); 
            bsub=(Button)findViewById(R.id.bsub); 
            bmul=(Button)findViewById(R.id.bmul); 
            bdiv=(Button)findViewById(R.id.bdiv); 
            bc=(Button)findViewById(R.id.bc); 
            bce=(Button)findViewById(R.id.bce); 
            bsqrt=(Button)findViewById(R.id.bsqrt); 
            bper=(Button)findViewById(R.id.bper); 
            binv=(Button)findViewById(R.id.binv); 
            bsign=(Button)findViewById(R.id.bsign); 
            bequ=(Button)findViewById(R.id.bequ); 
            bb=(Button)findViewById(R.id.bb); 
            value=(EditText)findViewById(R.id.value); 
            value.setText("0"); 
            b1.setOnClickListener(this); 
            b2.setOnClickListener(this); 
            b3.setOnClickListener(this); 
            b4.setOnClickListener(this); 
            b5.setOnClickListener(this); 
            b5.setOnClickListener(this); 
            b6.setOnClickListener(this); 
            b7.setOnClickListener(this); 
            b8.setOnClickListener(this); 
            b9.setOnClickListener(this); 
            b0.setOnClickListener(this); 
            bpoint.setOnClickListener(this); 
            badd.setOnClickListener(this); 
            bsub.setOnClickListener(this); 
            bmul.setOnClickListener(this); 
            bdiv.setOnClickListener(this); 
            bc.setOnClickListener(this); 
            bce.setOnClickListener(this); 
            bsqrt.setOnClickListener(this); 
            bper.setOnClickListener(this); 
            binv.setOnClickListener(this); 
            bsign.setOnClickListener(this); 
            bequ.setOnClickListener(this); 
            bb.setOnClickListener(this); 
    } 
     /**
     * 
     * @return 当前显示的值 
     *         异常则返回0
     */ 
    private float getValueOfNow(){ 
        String string=getStringOfNow(); 
        float result=0; 
        try{ 
            result=Float.parseFloat(string); 
        }catch (NumberFormatException e) { 
            ext=true; 
        } 
        return result; 
    } 
    /**
     * 
     * @return 当前显示的字符串
     */ 
    private String getStringOfNow(){ 
        return value.getText().toString(); 
    } 

[html]
<?xml version="1.0" encoding="utf-8"?> 
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <EditText android:id="@+id/value" android:singleLine="true" 
        android:editable="false" android:background="#ffff" 
        android:layout_height="wrap_content" android:layout_width="280dp" 
        android:layout_x="15dp" android:layout_y="10dp" android:textSize="18sp"></EditText> 
    <Button android:id="@+id/bb" android:layout_x="70dp" 
        android:layout_height="wrap_content" android:text="Backspace" 
        android:layout_width="wrap_content" android:layout_y="40dp"></Button> 
    <Button android:id="@+id/bce" android:layout_height="wrap_content" 
        android:text="CE" android:layout_x="190dp" android:layout_y="40dp" 
        android:layout_width="50dp"></Button> 
    <Button android:id="@+id/bc" android:layout_height="wrap_content" 
        android:text="C" android:layout_width="50dp" android:layout_x="250dp" 
        android:layout_y="40dp"></Button> 
    <Button android:id="@+id/b7" android:layout_height="wrap_content" 
        android:text="7" android:layout_width="50dp" android:layout_x="10dp" 
        android:layout_y="95dp"></Button> 
    <Button android:id="@+id/b8" android:layout_height="wrap_content" 
        android:text="8" android:layout_x="70dp" android:layout_y="95dp" 
        android:layout_width="50dp"></Button> 
    <Button android:id="@+id/b9" android:layout_height="wrap_content" 
        android:text="9" android:layout_x="130dp" android:layout_y="95dp" 
        android:layout_width="50dp"></Button> 
    <Button android:id="@+id/bdiv" android:layout_height="wrap_content" 
        android:text="/" android:layout_width="50dp" android:layout_x="190dp" 
        android:layout_y="95dp"></Button> 
    <Button android:id="@+id/bsqrt" android:layout_height="wrap_content" 
        android:text="sqrt" android:layout_x="250dp" android:layout_y="95dp" 
        android:layout_width="50dp"></Button> 
    <Button android:id="@+id/b4" android:layout_height="wrap_content" 
        android:text="4" android:layout_width="50dp" android:layout_x="10dp" 
        android:layout_y="150dp"></Button> 
    <Button android:id="@+id/b5" android:layout_height="wrap_content" 
        android:text="5" android:layout_width="50dp" android:layout_x="70dp" 
        android:layout_y="150dp"></Button> 
    <Button android:id="@+id/b6" android:layout_height="wrap_content" 
        android:text="6" android:layout_width="50dp" android:layout_x="130dp" 
        android:layout_y="150dp"></Button> 
    <Button android:id="@+id/bmul" android:layout_height="wrap_content" 
        android:text="*" android:layout_width="50dp" android:layout_x="190dp" 
        android:layout_y="150dp"></Button> 
    <Button android:id="@+id/bper" android:layout_height="wrap_content" 
        android:text="%" android:layout_width="50dp" android:layout_x="250dp" 
        android:layout_y="150dp"></Button> 
    <Button android:id="@+id/b1" android:layout_height="wrap_content" 
        android:text="1" android:layout_width="50dp" android:layout_x="10dp" 
        android:layout_y="205dp"></Button> 
    <Button android:id="@+id/b2" android:layout_height="wrap_content" 
        android:text="2" android:layout_width="50dp" android:layout_x="70dp" 
        android:layout_y="205dp"></Button> 
    <Button android:id="@+id/b3" android:layout_height="wrap_content" 
        android:text="3" android:layout_width="50dp" android:layout_x="130dp" 
        android:layout_y="205dp"></Button> 
    <Button android:id="@+id/bsub" android:layout_height="wrap_content" 
        android:text="-" android:layout_width="50dp" android:layout_x="190dp" 
        android:layout_y="205dp"></Button> 
    <Button android:id="@+id/binv" android:layout_height="wrap_content" 
        android:text="1/x" android:layout_width="50dp" android:layout_x="250dp" 
        android:layout_y="205dp"></Button> 
    <Button android:id="@+id/b0" android:layout_height="wrap_content" 
        android:text="0" android:layout_width="50dp" android:layout_x="10dp" 
        android:layout_y="260dp"></Button> 
    <Button android:id="@+id/bsign" android:layout_height="wrap_content" 
        android:text="-/+" android:layout_width="50dp" android:layout_x="70dp" 
        android:layout_y="260dp"></Button> 
    <Button android:id="@+id/bpoint" android:layout_height="wrap_content" 
        android:text="." android:layout_width="50dp" android:layout_x="130dp" 
        android:layout_y="260dp"></Button> 
    <Button android:id="@+id/badd" android:layout_height="wrap_content" 
        android:text="+" android:layout_width="50dp" android:layout_x="190dp" 
        android:layout_y="260dp"></Button> 
    <Button android:id="@+id/bequ" android:layout_height="wrap_content" 
        android:text="=" android:layout_width="50dp" android:layout_x="250dp" 
        android:layout_y="260dp"></Button> 
</AbsoluteLayout> 

 


摘自 编程小学生