0

我正在开发一个 Android 应用程序,但不知道如何在公式计算中处理空值。这是我试图跳过空值的代码,但这不起作用。

更新

实际上我正在尝试这样做

package ecc.ecc.pkg;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import ecc.ecc.pkg.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class ECCActivity extends Activity {
    Button    btncalc;
    EditText  molcostper;
    TextView  costper;
    double    molcost = 0;
    double    cstperusd = 0;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initcontrols();
    }
    public void initcontrols()
    {
        molcostper=(EditText)findViewById(R.id.molcostper);
            costper=(TextView)findViewById(R.id.costper);  

        btncalc=(Button)findViewById(R.id.btnCalc);
        btncalc.setOnClickListener(new Button.OnClickListener(){
            public void onClick(View v)
            {
                calculate();
            }

        });
    }
    public void calculate()
    {
        NumberFormat formatter = new DecimalFormat("#,###,###,###.##");


        molcost=Double.parseDouble(molcostper.getText().toString());


        cstperusd = replaceIfNull(molcost,8500)*94

        costper.setText(formatter.format(cstperusd));
    }
 public static <T> T replaceIfNull(T objectToCheck, T defaultValue) {
          return objectToCheck==null ? defaultValue : objectToCheck;
        }
}

此方法正在产生错误,请任何人帮助处理此问题

4

4 回答 4

1

这一点应该没有完整的解决方案......

molcost 的范围应该更大,因为有两个 molcost one local to if other is in else with greater scope...

double molcost =0;
if (molcostper != null)
        {   
        molcost=Double.parseDouble(molcostper.getText().toString());
        }
        else
        {
        molcost=8500;
            }
result=molcost*10;
于 2012-06-20T05:45:17.357 回答
1

将您的代码更改为:

double molcost =0;
EditText molcostperss  = (EditText) findViewById(R.id.molcostper);
String change  = molcostperss.getText().toString();
if (change.trim().equals("") && change!=null ) {
 molcost=Double.parseDouble(change);
}
else
{
molcost=8500;

}
result=molcost*10;

编辑:通过将 costper 初始化为来更新您的 initcontrols() 方法

 public void initcontrols()
    {
        molcostper=(EditText)findViewById(R.id.molcostper);
        costper=(TextView)findViewById(R.id.costper);
        btncalc=(Button)findViewById(R.id.btnCalc);
        btncalc.setOnClickListener(new Button.OnClickListener(){
            public void onClick(View v)
            {
                calculate();
            }

        });
    }
于 2012-06-20T05:47:07.200 回答
0

您需要在代码中初始化 molcost 变量。

于 2012-06-20T05:55:52.733 回答
0

试试这个。

if (molcostper != null && !molcostper.getText().toString().isEmpty() )
{   
    molcost=Double.parseDouble(molcostper.getText().toString());
}
else
{
    molcost=8500;
}

if it doesn't work then try to download the '/data/anr/traces.txt' file and check the log. It might provide you some hints. If possible please paste the log here which can help us to identify the problem.

于 2012-06-20T06:59:18.640 回答