gpt4 book ai didi

java - 从计算中收到错误的结果

转载 作者:行者123 更新时间:2023-11-29 03:40:45 24 4
gpt4 key购买 nike

The maximum heart rate is the highest heart rate obtained during maximum exercise. The difference in maximum heart rate depends on age and gender. There are simple methods to gauge your predicted maximum heart rate such as the formula 220 - your age = predicted maximum heart rate for a male. For instance, a 40-year-old male’s predicted maximum heart rate is 180 beats/minute.

该程序需要使用以下公式计算男性的最大心率:220-他们的年龄=最大心率和:212-他们的年龄=女性的最大心率。用户必须能够输入他们的年龄并选择他们的性别并选择他们的静息心率。然后程序必须使用此公式来确定您的目标心率:

目标心率 = [(最大心率 – 静息心率)× 80%]

程序必须能够显示用户的最大心率、静息心率和目标心率。

但出于某种原因,当我运行我的程序时,我收到了它似乎没有完全接收输入并在为男性单击按钮时给我一个错误的答案,它给我的答案是男性 179.0 和女性 169.0 .

我看了一遍又一遍,似乎无法找出这个逻辑错误。这是我的代码。

public class MainHMR extends Activity implements View.OnClickListener {

Button chkCmd;
CheckBox Male, Femail;
EditText age, RestHeart;
TextView MaxHeart, TargetHeart;

int m = 220;
int f = 212;
int AgeResult =0, RestResultFinal =0, TargetHeartFinal =0;
double MaleResult, FemailResult;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_hmr);
Initilise();
format();
Male.setOnClickListener(this);
Femail.setOnClickListener(this);
chkCmd.setOnClickListener(this);

}

private void Initilise() {
// TODO Auto-generated method stub
/* Button */chkCmd = (Button) findViewById(R.id.bResults);
/* checkBox */Male = (CheckBox) findViewById(R.id.cbM);
/* checkBox */Femail = (CheckBox) findViewById(R.id.cbF);
/* EditText */age = (EditText) findViewById(R.id.etAge);
/* EditText */RestHeart = (EditText) findViewById(R.id.etRestHeart);
/* TextView */TargetHeart = (TextView) findViewById(R.id.etTargetHeard);
}

private void format() {
// TODO Auto-generated method stub

String change = age.getText().toString();
AgeResult = 0; // set it to 0 as the default
try {
AgeResult = Integer.parseInt(change);
System.out.println(AgeResult);
}
catch (NumberFormatException e){}

String changeTwo = RestHeart.getText().toString();
RestResultFinal = 0; // set it to 0 as the default
try {
RestResultFinal = Integer.parseInt(changeTwo);
System.out.println(RestResultFinal);
}
catch (NumberFormatException e){}
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

switch(v.getId()){
case R.id.bResults:
if (Male.isChecked()) {
int result = m - AgeResult;
MaleResult = ((result - RestResultFinal) * 0.8);
String finalResult = Double.toString(MaleResult);
TargetHeart.setText(finalResult);
} else if (Femail.isChecked()) {
int result = f - AgeResult;
FemailResult = (int) ((result - RestResultFinal) * 0.8);
String finalResult = Double.toString(FemailResult);
TargetHeart.setText(finalResult);
break;
}

}
}
}

最佳答案

好吧,如果男性为 176,女性为 169,我能理解……但不是 179。你确定吗?

怀疑 Integer.parseInt 对你来说是失败的 - 但你不能告诉,因为这个:

catch (NumberFormatException e){}

从不 只是捕获异常并完全忽略它。 至少将日志放在那里。

您对两个输入执行相同的操作。如果任一解析操作失败,您为什么要继续(并提供虚假数据)?当然,您应该就此停止,并通知用户他们应该修复他们的输入。

接下来是您执行算术的方式。您在 integer 算术中完成所有操作,但随后使用 Double.toString - 为什么?这只会给你一个以 .0 结尾的值。如果您想实际上得到一个非整数结果,您需要以 float 执行算术运算。例如

// I've changed the names of some variables to comply with conventions
double maximumRate = MALE_MAXIMUM_RATE_LIMIT - parsedAge;
double targetRate = (maximumRate - parsedRestingRate) * 0.8;

关于java - 从计算中收到错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com