算术运算

时间:2015-12-05 08:57:51

标签: android arithmetic-expressions

enter image description here

大家好我有这个问题。当我在editText中输入分数时,我希望应用程序在Textview(w / red框)中生成等效项。但该应用程序崩溃了。

private void calculateEquivalent(){
        double x , y;
        y = Double.valueOf(total_score.toString());
        x = Double.valueOf(editScore.getText().toString());

        if (x >= y * 0.65){
            double equivalent = (Math.round((100 + (72 * (x - y)) / y)));
            String equi = String.valueOf(equivalent);
            textEquivalent.setText(equi);
        } else {
            double equivalent = (Math.round((75 + (23 * (x - y * 0.65)) / y)));
            String equi = String.valueOf(equivalent);
            textEquivalent.setText(equi);
        }
    }

5 个答案:

答案 0 :(得分:2)

从字符串转换为双精度

时,错误为空字符串

在此代码中

y = Double.valueOf(total_score.toString());

x = Double.valueOf(editScore.getText().toString());

可能是total_score.toString()或editScore.getText()。toString()为空

什么是total_score变量的类型

答案 1 :(得分:0)

尝试将空字符串转换为double时遇到问题。您应首先检查文本字段是否为空,并且通过捕获NumberFormatException

它不包含字符

答案 2 :(得分:0)

正如错误日志所示,您需要确保在开始计算之前有适当的值。

因此,在调用此函数之前,您需要检查以下条件:

try
        {
        if((total_score.toString() != null && !total_score.toString().isEmpty()) && (editScore.getText().toString()!=null && !editScore.getText().toString().isEmpty()))
            {
                y = Double.valueOf(total_score.toString());

                x = Double.valueOf(editScore.getText().toString()); //chances of getting a Numberformat exception if entered value is not a number

                calculateEquivalent();
            }
        }
        catch(NumberFormatException e)
        {
        //Toast.makeText(m_context, "You entered a wrong value,Please enter only numeric values", Toast.LENGTH_SHORT).show();   
          e.printStackTrace();
        }
        catch(Throwable e)
        {
          e.printStackTrace();
        }

同样在你的calculateEquivalent()中;方法,你需要确保y的值不应该为零。

希望这可以帮到你:)

答案 3 :(得分:0)

嘿@callmejeo你上面写的函数的主要问题是你正在转变" NULL"将值赋入String,这样你可以做的就是HANDLE异常。

 private void calculateEquivalent(){

       try{
            double x , y;
            y = Double.valueOf(total_score.toString());
            x = Double.valueOf(editScore.getText().toString());

            if (x >= y * 0.65){
                double equivalent = (Math.round((100 + (72 * (x - y)) / y)));
                String equi = String.valueOf(equivalent);
                textEquivalent.setText(equi);
            } else {
                double equivalent = (Math.round((75 + (23 * (x - y * 0.65)) / y)));
                String equi = String.valueOf(equivalent);
                textEquivalent.setText(equi);
            }
}
   catch(Exception e){
         Toast.makeText(this,"Please Enter some value",Toast.LENGTH_LONG).show();
   }
}

答案 4 :(得分:0)

非常感谢你们没有你的建议我可能会遇到这个问题:) 然后我想出了这个

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_student_quiz);

        TextWatcher inputTextWatcher = new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                calculateEquivalent();
            }
        };
        editScore.addTextChangedListener(inputTextWatcher);

    }

private void calculateEquivalent(){
        try {
            y = Double.parseDouble(total_score);
            x = Double.parseDouble(editScore.getText().toString());
            if (x >= y * 0.65){
                double equivalent = (Math.round((100 + (72 * (x - y)) / y)));
                String equi = String.valueOf(equivalent);
                textEquivalent.setText(equi);

            } else {
                double equivalent = (Math.round((75 + (23 * (x - y * 0.65)) / y)));
                String equi = String.valueOf(equivalent);
                textEquivalent.setText(equi);
            }
        }catch (Exception e){
            Toast.makeText(getApplicationContext(), "Please Enter a Number", Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }

    }