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 自适应 LMS 算法实现 FIR 最佳维纳滤波器matlab方案
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像