Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从浮动中检索到的值是0.0?_Java_Floating Point - Fatal编程技术网

Java 从浮动中检索到的值是0.0?

Java 从浮动中检索到的值是0.0?,java,floating-point,Java,Floating Point,此函数返回0.0,尽管所有值都是浮点值,并且从共享首选项中正确检索!可能是什么错误 float BMR(){ SharedPreferences customSharedPreference = getSharedPreferences( "myCustomSharedPrefs", Activity.MODE_PRIVATE); String Weight =customSharedPreference.getString("weightp

此函数返回0.0,尽管所有值都是浮点值,并且从共享首选项中正确检索!可能是什么错误

float BMR(){

    SharedPreferences customSharedPreference = getSharedPreferences(
                "myCustomSharedPrefs", Activity.MODE_PRIVATE);

    String  Weight =customSharedPreference.getString("weightpref", null);
    float weight = Float.valueOf(Weight);

    String  Height = customSharedPreference.getString("heightpref",null);
    float height = Float.valueOf(Height);
    String Age = customSharedPreference.getString("agepref", null);
    float age = Float.valueOf(Age);

    int gender = customSharedPreference.getInt("genderpref", 0);

    Toast.makeText(StatsActivity.this, Age, Toast.LENGTH_LONG).show();
    if ( gender == 0){
        bmr = (float) (10.0 *weight + 6.25 * height - 5.0 * age + 5.0);
    }
    if(gender == 1){
        bmr = (float) (10.0 * weight + 6.25 * height - 5.0 * age- 161.0);
    }

    String bmrtest = String.valueOf(bmr);
    Toast.makeText(StatsActivity.this, "bmr is "+bmrtest, Toast.LENGTH_LONG).show();
    return bmr;
    }

如果性别不是0或1会发生什么?您的bmr将保持未分配到0.0

如果这是个问题,你可以考虑将来:

在if后面加一个else子句 将这两个如果分组为一个elseif,因为它们是独占的 至少输入一个断言来检查性别是否为1或0
您是否尝试过使用调试器单步执行代码?此函数实际上并没有在任何地方声明名为bmr的变量。您需要调试代码,并在bmr的计算行中提供性别、体重、身高和年龄的值。我正在使用toast查看共享prefs的内容,并获得存储在sharedprefs中的正确值。此外,从我所能看到的代码来看,将性别作为一个枚举,其中包含男性和女性字段,这可能会更好。我将使用double而不是float,这将简化代码,减少表示错误。我还将使用parseDouble而不是valueOf,因为后者创建了一个您不需要的对象。我使用toast来查看共享Pref的内容,并获得存储在SharedPref中的正确值,包括性别!所以,我认为你已经一步一步地调试好了,你确实进入了两个if子句中的一个,对吗?您确定表达式中的所有值都不是零吗?没有更多的地方会出错……如果我使用toast,并且它提供了我想要的值,我真的需要调试器吗?