如果使用(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");
}
}
}
答案 0 :(得分:3)
float
是原始数据类型,而不是对象。 null
检查用于对象。
对于基元,您应该使用默认值检查。对于float,默认值为0.0f
。
阅读以下内容:
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
答案 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)
在我看来,有两种方法可以强制用户只输入浮动值。
inputType
用于EditText
通过正则表达式检查输入的文本
Pattern ptrn = Pattern.compile("^\\d*\\.\\d*$");
String enteredText = ...;
if(ptrn.matcher(enteredText).matches()){
// try to parse the string here
}