介面如下:
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;
}
}
}
全站熱搜