介面如下:

介面.jpg

code如下,值得注意的地方在於三角函數轉換的時候會有所誤差

所以有做四捨五入去處理

 

package com.homework.user.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.google.android.gms.common.api.GoogleApiClient;

import java.text.DecimalFormat;

public class MainActivity extends AppCompatActivity {
    private Button Num1, Num2, Num3, Num4, Num5, Num6, Num7, Num8, Num9, Num0;
    private Button butdot, butdiv, butmul, butadd, butsub, butequal, butsin, butcos, buttan, butAC;
    private TextView result;
    private GoogleApiClient client;
    String NU1 = "0" , NU2 = "0" ;
    int Cal_index = 0 ; //用來判斷是否
    int Index_Value = 0 ; //用來判斷是否按下按鍵


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SetObjFunction();    //呼叫建立物件副程式
        SetMyOnClick();      //Button按下副程式
    }

    private void SetMyOnClick() {
        Num0.setOnClickListener(MyOnClick);
        Num1.setOnClickListener(MyOnClick);
        Num2.setOnClickListener(MyOnClick);
        Num3.setOnClickListener(MyOnClick);
        Num4.setOnClickListener(MyOnClick);
        Num5.setOnClickListener(MyOnClick);
        Num6.setOnClickListener(MyOnClick);
        Num7.setOnClickListener(MyOnClick);
        Num8.setOnClickListener(MyOnClick);
        Num9.setOnClickListener(MyOnClick);
        butdot.setOnClickListener(MyOnClick);
        butadd.setOnClickListener(MyOnClick);
        butsub.setOnClickListener(MyOnClick);
        butdiv.setOnClickListener(MyOnClick);
        butmul.setOnClickListener(MyOnClick);
        butsin.setOnClickListener(MyOnClick);
        butcos.setOnClickListener(MyOnClick);
        buttan.setOnClickListener(MyOnClick);
        butAC.setOnClickListener(MyOnClick);
        butequal.setOnClickListener(MyOnClick);
    }

    private void SetObjFunction() {
        Num0=(Button) findViewById(R.id.Num0);
        Num1=(Button) findViewById(R.id.Num1);
        Num2=(Button) findViewById(R.id.Num2);
        Num3=(Button) findViewById(R.id.Num3);
        Num4=(Button) findViewById(R.id.Num4);
        Num5=(Button) findViewById(R.id.Num5);
        Num6=(Button) findViewById(R.id.Num6);
        Num7=(Button) findViewById(R.id.Num7);
        Num8=(Button) findViewById(R.id.Num8);
        Num9=(Button) findViewById(R.id.Num9);
        butadd=(Button) findViewById(R.id.butadd);
        butsub=(Button) findViewById(R.id.butsub);
        butdiv=(Button) findViewById(R.id.butdiv);
        butmul=(Button) findViewById(R.id.butmul);
        butdot=(Button) findViewById(R.id.butdot);
        butcos=(Button) findViewById(R.id.butcos);
        butsin=(Button) findViewById(R.id.butsin);
        buttan=(Button) findViewById(R.id.buttan);
        butAC=(Button) findViewById(R.id.butAC);
        butequal = (Button) findViewById(R.id.butequal);
        result = (TextView) findViewById(R.id.result);
        result.setText("0"); //設定起始字元為0
     }

    private Button.OnClickListener MyOnClick = new Button.OnClickListener()
     {
       public void onClick(View v) //偵測哪個按鍵
       {
           String Str_Value;
           Str_Value=result.getText().toString();  //why?
           switch (v.getId()) {
               case R.id.Num0:DisplayNU("0");break;
               case R.id.Num1:DisplayNU("1");break;
               case R.id.Num2:DisplayNU("2");break;
               case R.id.Num3:DisplayNU("3");break;
               case R.id.Num4:DisplayNU("4");break;
               case R.id.Num5:DisplayNU("5");break;
               case R.id.Num6:DisplayNU("6");break;
               case R.id.Num7:DisplayNU("7");break;
               case R.id.Num8:DisplayNU("8");break;
               case R.id.Num9:DisplayNU("9");break;
               case R.id.butdot:DisplayNU(".");break;
               case R.id.butAC: result.setText("0");break; //clean ALL

               //calculate
               case R.id.butadd:Calculate(0 , Str_Value);break; //do + operation
               case R.id.butsub:Calculate(1 , Str_Value);break; //do - operation
               case R.id.butmul:Calculate(2 , Str_Value);break; //do * operation
               case R.id.butdiv:Calculate(3 , Str_Value);break; //do / operation
               case R.id.butequal:Calculate(99 , Str_Value);break; //do = operation


               //三角函數運算
               case R.id.butsin:
                   double sin_value=Double.valueOf(Str_Value) ;
                   double D_sin_value = Math.toRadians(sin_value);
                   double sin_result = Math.sin(D_sin_value);
                   DecimalFormat df_sin = new DecimalFormat("0.000000000000");
                   sin_result = Double.parseDouble(df_sin.format(sin_result));
                   Str_Value = Double.toString(sin_result);
                   result.setText(Str_Value);
                   Index_Value = 1;
                   break;

               case R.id.butcos:
                   double cos_value=Double.valueOf(Str_Value);
                   double D_cos_value = Math.toRadians(cos_value);
                   double cos_result = Math.cos(D_cos_value);
                   DecimalFormat df_cos = new DecimalFormat("0.000000000000");
                   cos_result = Double.parseDouble(df_cos.format(cos_result));
                   Str_Value = Double.toString(cos_result) ;
                   result.setText(Str_Value);
                   Index_Value = 1;
                   break;

               case R.id.buttan:
                   double tan_value = Double.valueOf(Str_Value);
                   double D_tan_value = Math.toRadians(tan_value);
                   double tan_result = Math.tan(D_tan_value);
                   DecimalFormat df_tan = new DecimalFormat("0.000000000000");
                   tan_result = Double.parseDouble(df_tan.format(tan_result));
                   Str_Value = Double.toString(tan_result) ;
                   result.setText(Str_Value);
                   Index_Value = 1;
                   break;
           }
    }
    };
    //-----------------顯示數字-------------------------------
    private void DisplayNU(String S)
    {
        String str;
        String Zero = "0" ;
        str = result.getText().toString();
        if(Zero.equals(str) || Index_Value !=0)
        {
            result.setText(""); //clean textview
            result.setText(S);
            Index_Value = 0 ;
        }
        else
        {
            result.setText(str + S);
        }
    }

    //------------計算---------------------------

    private void Calculate (int Cal_value , String Cal_Nu) {
        double x;
        String Ans;
        switch (Cal_value) {
            case 0:
                NU1 = Cal_Nu;
                Cal_index = 0;
                result.setText("");
                break;
            case 1:
                NU1 = Cal_Nu;
                Cal_index = 1;
                result.setText("");
                break;
            case 2:
                NU1 = Cal_Nu;
                Cal_index = 2;
                result.setText("");
                break;
            case 3:
                NU1 = Cal_Nu;
                Cal_index = 3;
                result.setText("");
                break;

//----------------------------------------------------
            case 99:
                NU2 = result.getText().toString();
                double i = Double.valueOf(NU1);
                double j = Double.valueOf(NU2);
                switch (Cal_index) {
                    case 0:
                        x = i + j;
                        Ans = Double.toString(x);
                        result.setText(Ans);
                        break;
                    case 1:
                        x = i - j;
                        Ans = Double.toString(x);
                        result.setText(Ans);
                        break;
                    case 2:
                        x = i * j;
                        Ans = Double.toString(x);
                        result.setText(Ans);
                        break;
                    case 3:
                        x = i / j;
                        Ans = Double.toString(x);
                        result.setText(Ans);
                        break;
                }
                break;
        }
    }

}
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 siang830609 的頭像
    siang830609

    ICS的耳語

    siang830609 發表在 痞客邦 留言(0) 人氣()