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
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?