新手提问个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个回答

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

看异常,要是不会看,那就先放下这个,去百度找代码。自己比对吧

你应该把报的错也贴出来,这样根本找不到

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问