我正在尝试这个功能,我计算BMI计算所需的卡路里,然后我创建了另一个名为CalorieIntake的类,在这里我将计算总卡路里摄入量。 (我通过扩展BMI计算类来做到这一点。)
然后当我点击“检查”按钮时,它应该比较这两个值并显示解释。但是我继续在'interpretDiff(float diffValue)'部分得到错误,它提到它必须以String值返回。
这是我的代码..请帮助我查看问题所在。或者有更好的方法吗?请告诉我。非常感谢..
public class CalorieIntake extends BMIcalculation {
TextView counter1;
Button compare;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.form_calorieintake2);
Button btn_calcIntake = (Button) findViewById(R.id.button_calcIntake);
btn_calcIntake.setOnClickListener(btnListener_calcIntake);
counter1 = (TextView) findViewById(R.id.textView_totalCalorieIntake);
Button compare = (Button) this.findViewById(R.id.checkIntake);
compare.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
try {
if ((!counter1.equals("")) && (!caloriesresult.equals("")))
{
TextView compareText = (TextView)findViewById(R.id.compareLabel);
EditText counter1E = (EditText) findViewById(R.id.textView_totalCalorieIntake);
EditText caloriesresultE = (EditText)findViewById(R.id.caloriesText);
float calorieIntake = Float.parseFloat(counter1E.getText().toString().trim());
float calorieNeed = Float.parseFloat(caloriesresultE.getText().toString().trim());
float diffValue = calDiff(calorieIntake, calorieNeed);
String calInterpretation = interpretDiff(diffValue);
compareText.setText("Difference of" + diffValue + " : " + calInterpretation);
}
}catch (Exception k)
{ System.out.println(k);
Toast.makeText(CalorieIntake.this, "Error", Toast.LENGTH_SHORT).show();
}
}
private String interpretDiff(float diffValue)
{
if (diffValue < 100)
{
return "Eat more";
}
}
private float calDiff(float calorieIntake, float calorieNeed) {
return (float) (calorieIntake - calorieNeed);
}
});
}
答案 0 :(得分:0)
在interpretDiff中,如果diffValue不小于100会怎样?什么也没有回报。但是,java要求您返回一些内容,因为这是方法声明所暗示的内容。
解决方案是:
private String interpretDiff(float diffValue)
{
if (diffValue < 100)
return "Eat more";
return "Eat less";
}
这里不需要if diffValue的else语句不小于100,因为只有当diffValue&gt; = 100时才调用第二个return语句(因为命中一个return语句退出方法)。
关于抛出异常的问题,以及调用Toast错误,这只能由于以下代码而发生:
TextView compareText = (TextView)findViewById(R.id.compareLabel);
EditText counter1E = (EditText) findViewById(R.id.textView_totalCalorieIntake);
EditText caloriesresultE = (EditText)findViewById(R.id.caloriesText);
float calorieIntake = Float.parseFloat(counter1E.getText().toString().trim());
float calorieNeed = Float.parseFloat(caloriesresultE.getText().toString().trim());
float diffValue = calDiff(calorieIntake, calorieNeed);
String calInterpretation = interpretDiff(diffValue);
compareText.setText("Difference of" + diffValue + " : " + calInterpretation);
假设findViewById中没有问题,则错误可能来自于获取counter1E,caloriesresultE(如果它们为空)的文本。如果这些都不为null,那么请检查以确保callDiff和interpretDiff中没有错误。最后,确保compareText不为空。