亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

計算器的等于沒反應

為什么計算器的等于沒反應?

package com.example.mach;


import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.text.Editable;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
//import android.view.Window;



public class MainActivity extends ActionBarActivity implements OnClickListener{
?private EditText et;
?private Button bt_c;
?private Button bt_del;
?private Button bt_cheng;
?private Button bt_minus;
?private Button bt_plus;
?private Button bt_equal;
?private Button bt_chu;
?private Button bt_point;
?
?private Button bt_7;
?private Button bt_8;
?private Button bt_9;
?private Button bt_4;
?private Button bt_5;
?private Button bt_6;
?private Button bt_1;
?private Button bt_2;
?private Button bt_3;
?private Button bt_0;
?private boolean clear_flag;//清空標識
?
??? @Override
??? protected void onCreate(Bundle savedInstanceState) {
??? ?
??????? super.onCreate(savedInstanceState);
??????? setContentView(R.layout.activity_main);
??????? et=(EditText)findViewById(R.id.et1);
??????? bt_c=(Button) findViewById(R.id.button_c);
??????? bt_equal=(Button) findViewById(R.id.btn_equal);
??????? bt_del=(Button) findViewById(R.id.button_del);
??????? bt_chu=(Button) findViewById(R.id.button_chu);
??????? bt_plus=(Button) findViewById(R.id.button_plus);
??????? bt_minus=(Button) findViewById(R.id.button_minus);
??????? bt_point=(Button) findViewById(R.id.button_point);
??????? bt_cheng=(Button) findViewById(R.id.button_cheng);
???????
??????? bt_7=(Button) findViewById(R.id.button_7);
??????? bt_8=(Button) findViewById(R.id.button_8);
??????? bt_9=(Button) findViewById(R.id.button_9);
??????? bt_4=(Button) findViewById(R.id.button_4);
??????? bt_5=(Button) findViewById(R.id.button_5);
??????? bt_6=(Button) findViewById(R.id.button_6);
??????? bt_1=(Button) findViewById(R.id.button_1);
??????? bt_2=(Button) findViewById(R.id.button_2);
??????? bt_3=(Button) findViewById(R.id.button_3);
??????? bt_0=(Button) findViewById(R.id.btn_0);
??????? //設置按鈕的點擊事件
??????? bt_c.setOnClickListener(this);
??????? bt_del.setOnClickListener(this);
??????? bt_chu.setOnClickListener(this);
??????? bt_plus.setOnClickListener(this);
??????? bt_cheng.setOnClickListener(this);
??????? bt_point.setOnClickListener(this);
??????? bt_minus.setOnClickListener(this);
??????? bt_equal.setOnClickListener(this);
???????
??????? bt_7.setOnClickListener(this);
??????? bt_8.setOnClickListener(this);
??????? bt_9.setOnClickListener(this);
??????? bt_4.setOnClickListener(this);
??????? bt_5.setOnClickListener(this);
??????? bt_6.setOnClickListener(this);
??????? bt_1.setOnClickListener(this);
??????? bt_2.setOnClickListener(this);
??????? bt_3.setOnClickListener(this);
??????? bt_0.setOnClickListener(this);
?
???????
?????? // this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉標題欄
??? }
??


??? @Override
??? public boolean onCreateOptionsMenu(Menu menu) {
??????? // Inflate the menu; this adds items to the action bar if it is present.
??????? getMenuInflater().inflate(R.menu.main, menu);
??????? return true;
??? }


??? @Override
??? public boolean onOptionsItemSelected(MenuItem item) {
??????? // Handle action bar item clicks here. The action bar will
??????? // automatically handle clicks on the Home/Up button, so long
??????? // as you specify a parent activity in AndroidManifest.xml.
??????? int id = item.getItemId();
??????? if (id == R.id.action_settings) {
??????????? return true;
??????? }
??????? return super.onOptionsItemSelected(item);
??? }



?
?public void onClick(View arg0) {
??String str = et.getText().toString();??
??switch (arg0.getId()) {
??case R.id.btn_0:??
??case R.id.button_1:
??case R.id.button_2:
??case R.id.button_3:
??case R.id.button_4:
??case R.id.button_5:
??case R.id.button_6:
??case R.id.button_7:
??case R.id.button_8:
??case R.id.button_9:
??case R.id.button_point:
???if(clear_flag){
????clear_flag=false;
????str="";
????et.setText("");
???}
???et.setText(str+((Button) arg0).getText());
???break;??
??case R.id.button_plus:
??case R.id.button_minus:
??case R.id.button_cheng:
??case R.id.button_chu:?
???if(clear_flag){
????clear_flag=false;
????str="";
????et.setText("");
???}
???et.setText(str+" "+((Button) arg0).getText()+" ");
???break;
??case R.id.button_del:
???if(clear_flag){
????clear_flag=false;
????str="";
????et.setText("");
???}
???else if(str!=null&&str.equals("")){
????et.setText(str.substring(0, str.length()-1));?
???}
???break;
??case R.id.button_c:
???clear_flag=false;
???str="";
???et.setText("");
???break;
??case R.id.btn_equal:
???getResult();
???break;??
??}
?}
?/*
? * 運算結果
? */
??? private void getResult(){
??? ?String exp = et.getText().toString();
??? ?if(exp==null||exp.equals("")){
??? ??return;
??? ?}
??? ?if(!exp.contains(" ")){
??? ??return;
??? ?}
??? ?if(clear_flag){
??? ??clear_flag=false;
??? ??return;
??? ?}
??? ? clear_flag = true;
??? ?double result=0;
??? ?String s1=exp.substring(0, exp.indexOf(" "));//運算符前的字符串
??? ?String op=exp.substring(exp.indexOf(" ")+1, exp.indexOf(" ")+2);//運算符
??? ?String s2=exp.substring(exp.indexOf(" ")+3);//運算符后的字符
??? ?if(!s1.equals("")&&s2.equals("")){
??? ??double d1=Double.parseDouble(s1);
??? ??double d2=Double.parseDouble(s2);
??? ??if(op.equals("+")){
??? ???result=d1+d2;
??? ??}
??? ??else if(op.equals("-")){
??? ???result=d1-d2;
??? ??}
??? ??else if(op.equals("*")){
??? ???result=d1*d2;
??? ??}
??? ??else if(op.equals("/")){
??? ???if(d2==0){
??? ????Toast.makeText(MainActivity.this, "除數不為0!", Toast.LENGTH_LONG).show();
??? ????et.setText("0");
??? ???}
??? ???else{
??? ???result=d1/d2;
??? ???}
??? ??}
??? ?? if(!s1.contains(".")&&!s2.contains(".")&&!op.contains("+")){
??? ???int r= (int) result;
??? ???et.setText(r+"");
??? ??}else {
??? ???et.setText(result+"");
??? ??}
??? ?}
???
??? ?else if(!s1.equals("")&&s2.equals("")){
??? ??double d1=Double.parseDouble(s1);
??? ??result=d1;
??? ??Toast.makeText(MainActivity.this, "不具備運算!", Toast.LENGTH_LONG).show();
??? ??et.setText(result+"");
??? ??}
??? ??else if(s1.equals("")&&!s2.equals("")){
??? ???double d2=Double.parseDouble(s2);
??? ???if(op.equals("+")){
??????? ???result=0+d2;
??????? ??}
??????? ??else if(op.equals("-")){
??????? ???result=0-d2;
??????? ??}
??????? ??else if(op.equals("*")){
??????? ???result=0;
??????? ??}
??????? ??else if(op.equals("/")){??????? ???
??????? ????result=0;??????? ???
??????? ??}
??????? ??if(!s2.contains(".")){
??????? ???int r= (int) result;
??????? ???et.setText(r+"");
??????? ??}else {
??????? ???et.setText(result+"");
??????? ??}
??? ??}else{
??? ???et.setText("");
??? ?}
??? }
?? }
???


正在回答

5 回答

?private?void?getResult()?{
?????...
?????String?s2?=?exp.substring(exp.indexOf("?")?+?3);//?運算符后的字符
?????//?if?(!s1.equals("")?&&?s2.equals(""))?{?此處s2的判斷應取反
?????if?(!s1.equals("")?&&?!s2.equals(""))?{
?????...
?}

- -|| 上面那個作廢。。。課程答案竟然沒法修改

0 回復 有任何疑惑可以回復我~
#1

圣見兮月 提問者

非常感謝!
2017-03-01 回復 有任何疑惑可以回復我~

你的空格有的不對,你可以再看看視頻,空格有的是""-------有的是" "注意

0 回復 有任何疑惑可以回復我~

你可以 ?試一下我改了的 ?修改了沒說的bug 還好吧 你可以用用試試

0 回復 有任何疑惑可以回復我~
package?com.example.calculatordemo;

import?android.R.integer;
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;
import?android.widget.Toast;

public?class?MainActivity?extends?Activity?implements?OnClickListener?{
	Button?btn_0;
	Button?btn_1;
	Button?btn_2;
	Button?btn_3;
	Button?btn_4;
	Button?btn_5;
	Button?btn_6;
	Button?btn_7;
	Button?btn_8;
	Button?btn_9;

	Button?btn_point;//?小數點
	Button?btn_divide;//?除以
	Button?btn_multiply;//?乘以
	Button?btn_minus;//?減去
	Button?btn_pluse;//?加
	Button?btn_equal;//?等于

	Button?btn_clear;
	Button?btn_del;

	EditText?et_showview;
	boolean?needclear;
	@Override
	protected?void?onCreate(Bundle?savedInstanceState)?{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btn_0?=?(Button)?findViewById(R.id.btn_0);
		btn_1?=?(Button)?findViewById(R.id.btn_1);
		btn_2?=?(Button)?findViewById(R.id.btn_2);
		btn_3?=?(Button)?findViewById(R.id.btn_3);
		btn_4?=?(Button)?findViewById(R.id.btn_4);
		btn_5?=?(Button)?findViewById(R.id.btn_5);
		btn_6?=?(Button)?findViewById(R.id.btn_6);
		btn_7?=?(Button)?findViewById(R.id.btn_7);
		btn_8?=?(Button)?findViewById(R.id.btn_8);
		btn_9?=?(Button)?findViewById(R.id.btn_9);
		btn_point?=?(Button)?findViewById(R.id.btn_point);//?小數點
		btn_divide?=?(Button)?findViewById(R.id.btn_divide);//?除以
		btn_multiply?=?(Button)?findViewById(R.id.btn_multiply);//?乘以
		btn_minus?=?(Button)?findViewById(R.id.btn_minus);//?減去
		btn_pluse?=?(Button)?findViewById(R.id.btn_pluse);//?加
		btn_equal?=?(Button)?findViewById(R.id.btn_equal);//?等于

		btn_clear?=?(Button)?findViewById(R.id.btn_clear);
		btn_del?=?(Button)?findViewById(R.id.btn_del);
		et_showview?=?(EditText)?findViewById(R.id.et_showview);

		btn_0.setOnClickListener(this);
		btn_1.setOnClickListener(this);
		btn_2.setOnClickListener(this);
		btn_3.setOnClickListener(this);
		btn_4.setOnClickListener(this);
		btn_5.setOnClickListener(this);
		btn_6.setOnClickListener(this);
		btn_7.setOnClickListener(this);
		btn_8.setOnClickListener(this);
		btn_9.setOnClickListener(this);

		btn_point.setOnClickListener(this);
		btn_divide.setOnClickListener(this);
		btn_multiply.setOnClickListener(this);
		btn_minus.setOnClickListener(this);
		btn_pluse.setOnClickListener(this);
		btn_equal.setOnClickListener(this);

		btn_clear.setOnClickListener(this);
		btn_del.setOnClickListener(this);
	}

	@Override
	public?void?onClick(View?v)?{
		//?TODO?Auto-generated?method?stub
		String?str?=?et_showview.getText().toString();
		switch?(v.getId())?{
		case?R.id.btn_0:
		case?R.id.btn_1:
		case?R.id.btn_2:
		case?R.id.btn_3:
		case?R.id.btn_4:
		case?R.id.btn_5:
		case?R.id.btn_6:
		case?R.id.btn_7:
		case?R.id.btn_8:
		case?R.id.btn_9:
		case?R.id.btn_point:
			if(needclear&&!str.contains("+")&&!str.contains("-")&&!str.contains("×")&&!str.contains("÷")){
				str?=?"";
				et_showview.setText("");
				needclear?=?false;
			}
			et_showview.setText(str?+?((Button)?v).getText());
			break;
		case?R.id.btn_pluse:
		case?R.id.btn_minus:
		case?R.id.btn_multiply:
		case?R.id.btn_divide:
			et_showview.setText(str?+"?"+((Button)?v).getText()+"?");
			break;
		case?R.id.btn_equal:
			getResult();
			break;
		case?R.id.btn_del:
			if?(str?!=?null?&&?!str.equals(""))?{
				if(str.substring(str.length()-1,str.length()).equals("?")){
					et_showview.setText(str.substring(0,?str.length()?-?3));
				}else{
					et_showview.setText(str.substring(0,?str.length()?-?1));
				}
			}
			break;
		case?R.id.btn_clear:
			et_showview.setText("");
			break;
		}
	}

	/**
	?*?獲取計算結果
	?*/
	private?void?getResult()?{
		needclear?=?true;
		boolean?pointT?=?false;
		String?exp?=?et_showview.getText().toString();
		double?r?=?0;
		if(!exp.contains("?")||exp.substring(exp.length()-1,?exp.length()).equals("?")){
			et_showview.setText(exp+"");
????		Toast.makeText(MainActivity.this,?"計算的數據有錯",?2).show();
			return;
		}
		String?space[]?=?exp.split("?");?//通過空格獲取每個數據
		Double?arg1?=?Double.parseDouble(space[0]);//得到第一個數據,并且轉化為Double類型
		if(space[0].contains(".")){
			pointT?=?true;
		}
		for?(int?i?=?1;i<space.length;)?{
			if(space[i+1].contains(".")){
				pointT?=?true;
			}
			String?op?=?space[i];
	????????double?arg2?=?Double.parseDouble(space[i+1]);
			if(op.equals("+")){
	????????	?r?=?arg1?+?arg2;
	????????}else?if(op.equals("-")){
	????????	r?=?arg1?-?arg2;
	????????}else?if(op.equals("×")){
	????????	?r?=?arg1?*?arg2;
	????????}else?if(op.equals("÷")){
	????????	?if?(arg2?==?0)
	?????????????{
	????????????????r=0;
	?????????????}
	?????????????else
	?????????????{
	?????????????????r?=?arg1?/?arg2;
	?????????????}
	????????}?
			arg1=r;
			i=i+2;
		}
		if(!pointT){
			int?result?=?(int)r;
			et_showview.setText(result+"");
		}else{
			et_showview.setText(r+"");
		}
	}
//
//	/***
//	?*?@param?exp
//	?*????????????算數表達式
//	?*?@return?根據表達式返回結果
//	?*/
//	private?String?getRs(String?exp)?{
//		Interpreter?bsh?=?new?Interpreter();
//		Number?result?=?null;
//		try?{
//			exp?=?filterExp(exp);
//			result?=?(Number)?bsh.eval(exp);
//		}?catch?(EvalError?e)?{
//			e.printStackTrace();
//			return?"0";
//		}
//		return?result.doubleValue()?+?"";
//	}
//
//	/**
//	?*?@param?exp
//	?*????????????算數表達式
//	?*?@return?因為計算過程中,全程需要有小數參與.
//	?*/
//	private?String?filterExp(String?exp)?{
//		String?num[]?=?exp.split("");
//		String?temp?=?null;
//		double?dtemp?=?0?;
//		String?str_temp="";
//		for?(int?i?=?0;?i?<?num.length;?i++)?{
//			temp?=?num[i];
//			
//			if?(temp.equals("+")?||?temp.equals("-")?||?temp.equals("×")
//					||?temp.equals("÷"))?{
//				if(dtemp==0){
//				dtemp=Double.parseDouble(str_temp);
//				}
//				
//				str_temp="";
//			}else{
//				str_temp=str_temp+temp;
//			}
//		}
//
//		int?begin?=?0,?end?=?0;
//		for?(int?i?=?1;?i?<?num.length;?i++)?{
//			temp?=?num[i];
//			if?(temp.matches("[+-/()*]"))?{
//				if?(temp.equals("."))
//					continue;
//				end?=?i?-?1;
//				temp?=?exp.substring(begin,?end);
//				if?(temp.trim().length()?>?0?&&?temp.indexOf(".")?<?0)
//					num[i?-?1]?=?num[i?-?1]?+?".0";
//				begin?=?end?+?1;
//			}
//		}
//		return?Arrays.toString(num).replaceAll("[\\[\\],?]",?"");
//	}
}


0 回復 有任何疑惑可以回復我~
?private?void?getResult()?{
?????...
?????String?s2?=?exp.substring(exp.indexOf("?")?+?3);//?運算符后的字符
?????//?if?(!s1.equals("")?&&?s2.equals(""))?{?此處s2的判斷應取反
?????if?(!s1.equals("")?&&?s2.equals(""))?{
?????...
?}

我寫過兩篇關于這個計算器的手記,有時間可以去看看

0 回復 有任何疑惑可以回復我~
#1

圣見兮月 提問者

這是case語句中關于del的部分,有什么問題嗎? case R.id.button_del: if(clear_flag){ clear_flag=false; str=""; et.setText(""); } else if(str!=null&str.equals("")){ et.setText(str.substring(0, (str.length()-1))); } break;
2017-03-01 回復 有任何疑惑可以回復我~
#2

ziom 回復 圣見兮月 提問者

這個看需求,我當初實現這個的時候,做成了del鍵就只是單純的刪除一個字符,也沒有clear_flag標識
2017-03-02 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Android攻城獅的第一門課(入門篇)
  • 參與學習       312492    人
  • 解答問題       4931    個

想快速掌握Android應用開發基礎,選擇學習這門課程就對了。

進入課程

計算器的等于沒反應

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號