a421698843 2016-11-03 09:12 采纳率: 0%
浏览 1010

新手提问个android的问题

我写了个计算器的程序能跑但一按=号就奔溃,经过测试确定是=号算法问题;请各位大神帮忙看看

private void getResult() {

    String exp = et_input.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 s2 = exp.substring(0, exp.indexOf("-"));
    String s3 = exp.substring(0, exp.indexOf("*"));
    String s4 = exp.substring(0, exp.indexOf("/"));

    String op1 = exp.substring(exp.indexOf("+") , exp.indexOf("+") + 1);
    String op2 = exp.substring(exp.indexOf("-") , exp.indexOf("-") + 1);
    String op3 = exp.substring(exp.indexOf("*") , exp.indexOf("*") + 1);
    String op4 = exp.substring(exp.indexOf("/") , exp.indexOf("/") + 1);

    String t1 = exp.substring(exp.indexOf("+") + 2);//运算符后的字符串
    String t2 = exp.substring(exp.indexOf("-") + 2);//运算符后的字符串
    String t3 = exp.substring(exp.indexOf("*") + 2);//运算符后的字符串
    String t4 = exp.substring(exp.indexOf("/") + 2);//运算符后的字符串
    double d1 = Double.parseDouble(s1);
    double d2 = Double.parseDouble(t1);
    double d3 = Double.parseDouble(s2);
    double d4 = Double.parseDouble(t2);
    double d5 = Double.parseDouble(s3);
    double d6 = Double.parseDouble(t3);
    double d7 = Double.parseDouble(s4);
    double d8 = Double.parseDouble(t4);
    if (!s1.equals("") && !t1.equals("")) {//计算+

        result = d1 + d2;
    }
    if (!s2.equals("") && !t2.equals("")) {//计算-

        result = d3 - d4;
    }
    if (!s3.equals("") && !t3.equals("")) {//计算*

        result = d5 * d6;
    }
    if (!s4.equals("") && !t4.equals("")) {//计算/

        if (d2 == 0) {
            result = 0;
        } else {

            result = d7 / d8;
        }
    }

    else if (!s1.equals("")&&s2.equals("")){
        et_input.setText(exp);
    }else if (s1.equals("")&&!s2.equals("")){//如果符号前或符号后为空

        if (op1.equals("+")) {
            result = 0 + d1;
        } else if (op2.equals("-")) {
            result = 0 - d3;
        } else if (op3.equals("*")) {
            result = 0 ;
        } else if (op4.equals("/")) {

            result =0;

        }  if ( !s2.contains(".")) {
            int r = (int) result;
            et_input.setText(r + "");
        } else {
            et_input.setText(result + "");
        }
    }else{
        et_input.setText("");
    }
}

}

  • 写回答

3条回答

  • glustful 2016-11-03 09:24
    关注

    奔溃很正常,你这代码保守估计有个十多处会发生奔溃,所以别找原因了,去看下表达式的计算需要的算法,再来改进下再写

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!