我有5个textedits数字和一个按钮。当单击按钮时,应用程序根据哪个字段留空来计算不同的等式。但是,当我将多个字段留空并且第一个if语句中的第一个double无效时,应用程序会一直崩溃。
代码的想法
if (first field.getText().toString().equals("")) {...}
else if (second field.getText().toString().equals("")) {...}
else if (third field.getText().toString().equals("")) {...}
else if (fourth field.getText().toString().equals("")) {...}
else if (fifth.getText().toString().equals("")) {...}
else {...}
如果它不是上述任何一个(2-5个空,0个空位),基本上最后一个应该只是干杯。
真正的语法是:
calc.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
EditText fv = (EditText) findViewById(R.id.pv_fv);
EditText pv = (EditText) findViewById(R.id.pv_pv);
EditText r = (EditText) findViewById(R.id.pv_discountrate);
EditText n = (EditText) findViewById(R.id.pv_periods);
EditText t = (EditText) findViewById(R.id.pv_years);
if (fv.getText().toString().equals("")) {
double r1 = Double.parseDouble(r.getText().toString());
double n1 = Double.parseDouble(n.getText().toString());
double t1 = Double.parseDouble(t.getText().toString());
double pv1 = Double.parseDouble(pv.getText().toString());
double answer1 = pv1*(Math.pow(1+(r1/n1) ,n1*t1 ));
answer1 = (double)(Math.round(answer1*100))/100;
TextView answer = (TextView) findViewById(R.id.pv_answer);
answer.setText("The Future Value of the cash flow is: "+answer1);
}
else if (pv.getText().toString().equals("")) {
double fv1 = Double.parseDouble(fv.getText().toString());
double r1 = Double.parseDouble(r.getText().toString());
double n1 = Double.parseDouble(n.getText().toString());
double t1 = Double.parseDouble(t.getText().toString());
double answer1 = fv1/(Math.pow(1+(r1/n1) ,n1*t1 ));
answer1 = (double)(Math.round(answer1*100))/100;
TextView answer = (TextView) findViewById(R.id.pv_answer);
answer.setText("The Present Value of the cash flow is: "+answer1);
}
else if (r.getText().toString().equals("")){
double fv1 = Double.parseDouble(fv.getText().toString());
double pv1 = Double.parseDouble(pv.getText().toString());
double n1 = Double.parseDouble(n.getText().toString());
double t1 = Double.parseDouble(t.getText().toString());
double answer1 = ( (Math.pow(fv1/pv1, 1/(n1*t1) ) ) -1)*n1 ;
answer1 = (double)(Math.round(answer1*100))/100;
TextView answer = (TextView) findViewById(R.id.pv_answer);
answer.setText("The discount rate / interest rate applied is: "+answer1);
}
else if (t.getText().toString().equals("")){
double fv1 = Double.parseDouble(fv.getText().toString());
double pv1 = Double.parseDouble(pv.getText().toString());
double n1 = Double.parseDouble(n.getText().toString());
double r1 = Double.parseDouble(r.getText().toString());
double answer1 = Math.log(fv1/pv1) / (n1* Math.log(1+(r1/n1) ) ) ;
answer1 = (double)(Math.round(answer1*100))/100;
TextView answer = (TextView) findViewById(R.id.pv_answer);
answer.setText("The number of years is: "+answer1);
}
else if(n.getText().toString().equals("")){
Toast errormsg = Toast.makeText(PresentValue.this, "Sorry but Number of Periods cannot be computed.", 5000);
errormsg.setGravity(Gravity.CENTER, 0, 0);
errormsg.show();
}
else {
Toast errormsg = Toast.makeText(PresentValue.this, "You either left too many fields empty or filled all of them.", 5000);
errormsg.setGravity(Gravity.CENTER, 0, 0);
errormsg.show();
}
}
});
知道这有什么问题?
答案 0 :(得分:1)
假设您只有这五个字段 - 只有当没有字段为空时才能访问else
语句。
如果只有一个是空的,它将被相关的if语句捕获 - 它在这方面工作正常。
如果两个或更多的是空的 - 它将被捕获一次,在第一个if条件适用 - 这似乎不是你想要的。
如果没有空 - 将会到达else
语句,但没有一个是空的 - 这显然是你的意思。
另一种方法可能是不使用else if
语句,而只使用if
s,并计算故障数。如果它高于1 - 多个字段为空。如果为0 - 没有字段为空。如果可以应用它当然取决于每个语句的块的实际内容。
答案 1 :(得分:0)
将字段的名称或引用放入List
或Set
。然后,您可以轻松地检索之后需要的空白。
和
if (emptyFieldSet.size() > 1) {
toast that says "error multiples are empty"
}
比else
的oodles之后的if
语句更具可读性。
答案 2 :(得分:0)
这就是我解决它的方式。然而它似乎真的......闷气。有没有办法让它更无痕?
//clickhandler
calc.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
EditText fv = (EditText) findViewById(R.id.pv_fv);
EditText pv = (EditText) findViewById(R.id.pv_pv);
EditText r = (EditText) findViewById(R.id.pv_discountrate);
EditText n = (EditText) findViewById(R.id.pv_periods);
EditText t = (EditText) findViewById(R.id.pv_years);
TextView answer = (TextView) findViewById(R.id.pv_answer);
int filledfields = 0;
if (fv.getText().toString().equals("")){
filledfields ++;
}
if (pv.getText().toString().equals("")) {
filledfields ++;
}
if (r.getText().toString().equals("")) {
filledfields ++;
}
if (t.getText().toString().equals("")) {
filledfields ++;
}
if (n.getText().toString().equals("")) {
filledfields ++;
}
if (filledfields > 1){
Toast errormsg = Toast.makeText(PresentValue.this, "Sorry but you left more than one field empty.", 5000);
errormsg.setGravity(Gravity.CENTER, 0, 0);
errormsg.show();
}
else if (fv.getText().toString().equals("")) {
double r1 = Double.parseDouble(r.getText().toString());
double n1 = Double.parseDouble(n.getText().toString());
double t1 = Double.parseDouble(t.getText().toString());
double pv1 = Double.parseDouble(pv.getText().toString());
double answer1 = pv1*(Math.pow(1+(r1/n1) ,n1*t1 ));
answer1 = (double)(Math.round(answer1*100))/100;
answer.setText("The Future Value of the cash flow is: "+answer1);
}
else if (pv.getText().toString().equals("")) {
double fv1 = Double.parseDouble(fv.getText().toString());
double r1 = Double.parseDouble(r.getText().toString());
double n1 = Double.parseDouble(n.getText().toString());
double t1 = Double.parseDouble(t.getText().toString());
double answer1 = fv1/(Math.pow(1+(r1/n1) ,n1*t1 ));
answer1 = (double)(Math.round(answer1*100))/100;
answer.setText("The Present Value of the cash flow is: "+answer1);
}
else if (r.getText().toString().equals("")){
double fv1 = Double.parseDouble(fv.getText().toString());
double pv1 = Double.parseDouble(pv.getText().toString());
double n1 = Double.parseDouble(n.getText().toString());
double t1 = Double.parseDouble(t.getText().toString());
double answer1 = ( (Math.pow(fv1/pv1, 1/(n1*t1) ) ) -1)*n1 ;
answer1 = (double)(Math.round(answer1*100))/100;
answer.setText("The discount rate / interest rate applied is: "+answer1);
}
else if (t.getText().toString().equals("")){
double fv1 = Double.parseDouble(fv.getText().toString());
double pv1 = Double.parseDouble(pv.getText().toString());
double n1 = Double.parseDouble(n.getText().toString());
double r1 = Double.parseDouble(r.getText().toString());
double answer1 = Math.log(fv1/pv1) / (n1* Math.log(1+(r1/n1) ) ) ;
answer1 = (double)(Math.round(answer1*100))/100;
answer.setText("The number of years is: "+answer1);
}
else if(n.getText().toString().equals("")){
Toast errormsg = Toast.makeText(PresentValue.this, "Sorry but Number of Periods cannot be computed.", 5000);
errormsg.setGravity(Gravity.CENTER, 0, 0);
errormsg.show();
}
else {
Toast errormsg = Toast.makeText(PresentValue.this, "You either left too many fields empty or filled all of them.", 5000);
errormsg.setGravity(Gravity.CENTER, 0, 0);
errormsg.show();
}
}
});
//clickhandler end