浮点变量!= null无效

时间:2014-12-30 15:23:59

标签: java android

如果使用(loanAmtValue!= null),则抛出错误,即“运算符!=不能应用于float,null”。 Plzz sum1提出了这个问题的解决方案..如果在该字段中没有给出值,应用程序崩溃。所以我试图使用空条件检查,这样即使没有给出值,app也不会崩溃。

public class SICalculatorActivity extends Activity implements View.OnClickListener {

    private Button submit;
    private  Button submit2;
    SeekBar sb;
    TextView yrs;
    EditText loanAmt;
    EditText roi;
    TextView siResult;

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

        final int years;
        sb = (SeekBar)findViewById(R.id.set_years);
        yrs = (TextView)findViewById(R.id.years);

        sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

                yrs.setText(sb.getProgress()+" year(s)");
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

        addButtonClickListener();
    }

    private void addButtonClickListener() {

        submit = (Button)findViewById(R.id.button);
        submit.setOnClickListener(this);
        submit2 = (Button)findViewById(R.id.button2);
        submit2.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        float loanAmtValue = 0;
        float roiValue = 0;
        double answer=0;
        float y = sb.getProgress();

        loanAmt = (EditText)findViewById(R.id.amt);
        loanAmtValue = Float.parseFloat(loanAmt.getText().toString());
        roi = (EditText)findViewById(R.id.roi);
        roiValue = Float.parseFloat(roi.getText().toString());

        if (loanAmtValue != null && roiValue != null){


                case R.id.button:
                    answer = (loanAmtValue * roiValue * y) / 100;

                    siResult = (TextView) findViewById(R.id.result);
                    siResult.setText("Simple Interest for Amount Rs." + loanAmtValue + " and ROI " + roiValue + "% for "+y+" year(s) is = " + String.format("%.2f", answer));

                    loanAmt.setText("0");
                    roi.setText("0");
                    break;

            }


        }
        else
        {
            siResult.setText("Please provide valid details");
        }
    }
}

5 个答案:

答案 0 :(得分:3)

float是原始数据类型,而不是对象。 null检查用于对象。

对于基元,您应该使用默认值检查。对于float,默认值为0.0f

阅读以下内容:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

http://www.c4learn.com/java/java-default-values/

答案 1 :(得分:3)

看起来你的问题就在这里:

loanAmtValue = Float.parseFloat(loanAmt.getText().toString());

如果loanAmt不包含可以转换为浮点数的字符串,则此行将抛出NumberFormatException。

在尝试转换为float之前,您可以检查String是否为空:

if (loanAmt.getText() != null && !loanAmt.getText().isEmpty()) {
    loanAmtValue = Float.parseFloat(loanAmt.getText().toString());
}

如果用户输入了无效的字符串,这仍会引发异常,因此您必须捕获异常:

if (loanAmt.getText() != null && !loanAmt.getText().isEmpty()) {
    try {
        loanAmtValue = Float.parseFloat(loanAmt.getText().toString());
    catch (NumberFormatException ex) {
        loanAmtValue = 0.0; // or some other default value
    }
}

答案 2 :(得分:0)

Null用于对象。如果一个对象为null,那么这意味着该变量指向无处。

Obj a = null // a points nowhere
a = new Obj() // now a points to a place in the memory (a references an Obj object in the memory

浮点数不是对象类型,它是一种基本类型。但是如果你进行比较,请小心:x == 0.0(浮动比较不像比较整数!)。

答案 3 :(得分:0)

要完成答案,你不能检查浮点数是否为空,就像每个人都说的那样。你能做的就像" Der Golem"说检查它是否是!= 0,如果你想确保该值不是0(不一样像null !!!)。但是:

防止NumberFormatException您还必须确保编辑文本字段中的catched值是一个数字。您可以使用TextUtils:

  android.text.TextUtils.isDigitsOnly(CharSequence str).

在你的情况下,你应该这样做:

    loanAmt = (EditText)findViewById(R.id.amt);

    String loanAmtString = loanAmt.getText().toString();
    if(android.text.TextUtils.isDigitsOnly(loanAmtString)){
    loanAmtValue = Float.parseFloat(loanAmtString);
    }

    roi = (EditText)findViewById(R.id.roi);
    String roiString = roi.getText().toString();

    if(android.text.TextUtils.isDigitsOnly(roiString)){
    roiValue = Float.parseFloat(roiString);
    }

答案 4 :(得分:0)

在我看来,有两种方法可以强制用户只输入浮动值。

  1. inputType用于EditText
  2. 通过正则表达式检查输入的文本

    Pattern ptrn = Pattern.compile("^\\d*\\.\\d*$");
    String enteredText = ...;
    
    if(ptrn.matcher(enteredText).matches()){
        // try to parse the string here
    }