如何从类中传递数据并在另一个类中使用以进行计算

时间:2013-12-04 01:41:53

标签: java

我正在尝试这个功能,我计算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);
    }    
});
}

1 个答案:

答案 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不为空。