weixin_31570867 2015-10-09 07:56 采纳率: 0%
浏览 2315

android下的计算器中的退格功能实现不了,麻烦各位大神啦,谢谢!!

private EditText output = null;

private EditText input = null;

private Button btn0 = null; private Button btn1 = null; private Button btn2 = null; private Button btn3 = null; private Button btn4 = null; private Button btn5 = null; private Button btn6 = null; private Button btn7 = null; private Button btn8 = null; private Button btn9 = null; private Button btnadd = null; private Button btnsubtract = null; private Button btnmultiply = null; private Button btndivide = null; private Button btnclear = null; private Button btnresult = null; private Button btndot = null; private Button btnbackspace = null; private Button btnkaifang = null; private Button btnpingfang = null; private String str = "";// 保存数字 private String strold = "";// 原数字 private char act = ' ';// 记录“加减乘除等于”符号 private int count = 0;// 判断要计算的次数,如果超过一个符号,先算出来一部分 private Double result = 0.0;// 计算的输出结果 private Boolean errBoolean = false;// 有错误的时候为true,无错为false private Boolean flagBoolean = false;// 一个标志,如果为true,可以响应运算消息,如果为false,不响应运算消息,只有前面是数字才可以响应运算消息 private Boolean flagDot = false; // 小数点标志位 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); output = (EditText) rootView.findViewById(R.id.output); input = (EditText) rootView.findViewById(R.id.input); btn0 = (Button) rootView.findViewById(R.id.zero); btn1 = (Button) rootView.findViewById(R.id.one); btn2 = (Button) rootView.findViewById(R.id.two); btn3 = (Button) rootView.findViewById(R.id.three); btn4 = (Button) rootView.findViewById(R.id.four); btn5 = (Button) rootView.findViewById(R.id.five); btn6 = (Button) rootView.findViewById(R.id.six); btn7 = (Button) rootView.findViewById(R.id.seven); btn8 = (Button) rootView.findViewById(R.id.eight); btn9 = (Button) rootView.findViewById(R.id.nine); btnadd = (Button) rootView.findViewById(R.id.add); btnsubtract = (Button) rootView.findViewById(R.id.subtract); btnmultiply = (Button) rootView.findViewById(R.id.multiply); btndivide = (Button) rootView.findViewById(R.id.divide); btnclear = (Button) rootView.findViewById(R.id.clear); btnresult = (Button) rootView.findViewById(R.id.result); btndot = (Button) rootView.findViewById(R.id.dot); btnbackspace = (Button) rootView.findViewById(R.id.zhengfu); btnkaifang = (Button) rootView.findViewById(R.id.kaifang); btnpingfang = (Button) rootView.findViewById(R.id.pingfang); // 设置按钮侦听事件 btn0.setOnClickListener(new BtnOnClickListener()); btn1.setOnClickListener(new BtnOnClickListener()); btn2.setOnClickListener(new BtnOnClickListener()); btn3.setOnClickListener(new BtnOnClickListener()); btn4.setOnClickListener(new BtnOnClickListener()); btn5.setOnClickListener(new BtnOnClickListener()); btn6.setOnClickListener(new BtnOnClickListener()); btn7.setOnClickListener(new BtnOnClickListener()); btn8.setOnClickListener(new BtnOnClickListener()); btn9.setOnClickListener(new BtnOnClickListener()); // 执行运算 btnadd.setOnClickListener(new BtnOnClickListener()); btnsubtract.setOnClickListener(new BtnOnClickListener()); btnmultiply.setOnClickListener(new BtnOnClickListener()); btndivide.setOnClickListener(new BtnOnClickListener()); btnclear.setOnClickListener(new BtnOnClickListener()); btnresult.setOnClickListener(new BtnOnClickListener()); btndot.setOnClickListener(new BtnOnClickListener()); btnbackspace.setOnClickListener(new BtnOnClickListener()); btnkaifang.setOnClickListener(new BtnOnClickListener()); btnpingfang.setOnClickListener(new BtnOnClickListener()); return rootView; } class BtnOnClickListener implements OnClickListener { public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { // 输入数字 case R.id.zero: num(0); break; case R.id.one: num(1); break; case R.id.two: num(2); break; case R.id.three: num(3); break; case R.id.four: num(4); break; case R.id.five: num(5); break; case R.id.six: num(6); break; case R.id.seven: num(7); break; case R.id.eight: num(8); break; case R.id.nine: num(9); break; case R.id.dot: dot(); break; // 执行运算 // 退格功能 case R.id.zhengfu: backspace(); break; case R.id.kaifang: kaifang(); break; case R.id.pingfang: pingfang(); break; case R.id.add: add(); break; case R.id.subtract: sub(); break; case R.id.multiply: multiply(); break; case R.id.divide: divide(); break; case R.id.clear: clear(); break; // 计算结果 case R.id.result: result(); if (!errBoolean && flagBoolean) { output.setText(String.valueOf(result)); } default: break; } // if(strold==""&&act==' '&&str=="") // { // input.setText(""); // } // else { // input.setText(strold+act+str); // } if (act == 'k') { input.setText(strold); } else { input.setText(strold + act + str); } if (act == 'p') { input.setText(strold); } else { input.setText(strold + act + str); } output.setText(String.valueOf(result)); } private void kaifang() { // TODO Auto-generated method stub if (flagBoolean) { act = 'k'; strold = str; // str=""; result(); } } private void pingfang() { // TODO Auto-generated method stub if (flagBoolean) { act = 'p'; strold = str; // str=""; result(); } } //退格功能 private void backspace() { // TODO Auto-generated method stub String str1=input.getText().toString(); if(input.length()>0){ input.setText(str1.substring(0, str1.length()-1)); } } private void dot() { // TODO Auto-generated method stub if (!flagDot) { str = str + "."; flagBoolean = false; flagDot = true; } // str=str+i; // flagBoolean=false; } //清空 private void clear() { // TODO Auto-generated method stub str = strold = ""; count = 0; act = ' '; result = 0.0; flagBoolean = false; flagDot = false; input.setText(strold + act + str); output.setText(""); } private void divide() { // TODO Auto-generated method stub if (flagBoolean) { check(); act = '/'; flagBoolean = false; } } private void multiply() { // TODO Auto-generated method stub if (flagBoolean) { check(); act = '*'; flagBoolean = false; } } private void sub() { // TODO Auto-generated method stub if (flagBoolean) { check(); act = '-'; flagBoolean = false; } } private void add() { // TODO Auto-generated method stub if (flagBoolean) { check(); act = '+'; flagBoolean = false; } } private void check() { // TODO Auto-generated method stub if (count >= 1) { result(); str = String.valueOf(result); } strold = str; str = ""; count++; flagDot = false; } // 计算输出结果 private void result() { // TODO Auto-generated method stub if (flagBoolean) { Double a, b; // if(act=='k'||act=='c') // { // a=Double.parseDouble(strold); // } // else { // a=Double.parseDouble(strold); // b=Double.parseDouble(str); // } a = Double.parseDouble(strold); b = Double.parseDouble(str); if (b == 0 && act == '/') { clear(); output.setText("除数不能为零!"); errBoolean = true; } if (!errBoolean) { switch (act) { case '+': result = a + b; break; case '-': result = a - b; break; case '*': result = a * b; break; case '/': result = a / b; break; case 'k': result = Math.sqrt(a); break; case 'p': result = Math.pow(a,2); break; default: break; } } } } private void num(int i) { // TODO Auto-generated method stub str = str + String.valueOf(i); flagBoolean = true; } }

  • 写回答

3条回答 默认 最新

  • myleo_lost-a-horse 2015-10-09 09:11
    关注

    无法直视,这代码黏贴的,怎么看怎么晕

    评论

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀