2016-12-29 90 views
1

我如何将变量fTdee传递给另一个活动?我似乎有一个问题,因为fTdee是在If-Else语句中声明的,但我不认为我实际上是从If-Else语句之外访问这个变量fTdee。如何声明和初始化If Else语句Android中的变量?

final float fAF; 
    float fTdee; 
    String strAF = tvAF.getText().toString(); 

    if (strAF.matches("OptionA")) 

    { 
     fAF = 1.20f; 
     fTdee = bmr*fAF; 
    } 
    else if (strAF.matches("OptionB")) 
    { 
     fAF = 1.375f; 
     fTdee = bmr*fAF; 
    } 
    else if (strAF.matches("OptionC")) 
    { 
     fAF = 1.55f; 
     fTdee = bmr*fAF; 
    } 
    else if (strAF.matches("OptionD")) 
    { 
     fAF = 1.725f; 
     fTdee = bmr*fAF; 
    } 
    else if (strAF.matches("OptionE")) 
    { 
     fAF = 1.90f; 
     fTdee = bmr*fAF; 
    } 

      Intent in2 = new Intent(getApplicationContext(), CaloriesPage.class); 
      in2.putExtra("mTdee",fTdee); 
      startActivity(in2); 
+0

设置全局变量 –

+4

在if-else范围之外声明fTdee。另外我建议更换,如果其他spagetti与开关柜。 – Max

+1

它超出了范围。只要在if语句之前声明并且你没事。是的,当你把它放在额外的时候你正在访问它的范围之外。 – Fildor

回答

0

声明fTdee您的报表之外。 AND不会让他们final这意味着你不能在实例化后修改它们。

float fAF = 0.0f; 
String strAF = tvAF.getText().toString(); 

if (strAF.matches("OptionA")){ 
    fAF = 1.20f; 
}else if (strAF.matches("OptionB")){ 
    fAF = 1.375f; 
}else if (strAF.matches("OptionC")){ 
    fAF = 1.55f; 
}else if (strAF.matches("OptionD")){ 
    fAF = 1.725f; 
}else if (strAF.matches("OptionE")){ 
    fAF = 1.90f; 
} 

final float fTdee = bmr*fAF; 

Intent in2 = new Intent(getApplicationContext(), CaloriesPage.class); 
in2.putExtra("mTdee",fTdee); 
startActivity(in2); 

普罗蒂普:用更好的变种名称

+0

,你应该怎么做,如果我得到一个提示,说fTdee从内部类中访问,需要声明为final? – coffeeboi619

+0

你在哪里访问它? –

+0

其实你仍然可以有你''fTdee'如果final'你需要它。我会更新我的答案。 –

1

尝试是这样的

float fAF; 
float fTdee; 
String strAF = tvAF.getText().toString(); 

if (strAF.matches("OptionA")) 

{ 
    fAF = 1.20f; 
    fTdee = bmr*fAF; 
} 
+0

改变这种传递与意图PutExtra另一个活动,并删除了'终'关键字 –

0

尝试初始化上面如果变量else块这样的。

final float fAF; 
String strAF = tvAF.getText().toString(); 
float fTdee = 0.0; 
if (strAF.matches("OptionA")) 

{ 
    fAF = 1.20f; 
    fTdee = bmr*fAF; 
} 
else if (strAF.matches("OptionB")) 
{ 
    fAF = 1.375f; 
    fTdee = bmr*fAF; 
} 
else if (strAF.matches("OptionC")) 
{ 
    fAF = 1.55f; 
    fTdee = bmr*fAF; 
} 
else if (strAF.matches("OptionD")) 
{ 
    fAF = 1.725f; 
    fTdee = bmr*fAF; 
} 
else if (strAF.matches("OptionE")) 
{ 
    fAF = 1.90f; 
     fTdee = bmr*fAF; 
} 

     Intent in2 = new Intent(getApplicationContext(), CaloriesPage.class); 
     in2.putExtra("mTdee",fTdee); 
     startActivity(in2); 
0

你在做编程兄弟。如果您看到多余的东西,您必须自动意识到它可以减少。你已经在每个范围内声明fTdee,这对于良好的编程来说是非常糟糕的方法。相反,如注释中所述,声明一个活动级范围变量(将其初始化为默认值)并将其值设置为任何值(即在if-else语句内)。

final float fAF; 
float fTdee; 
String strAF = tvAF.getText().toString(); 

if (strAF.matches("OptionA")) 

{ 
    fAF = 1.20f; 
    fTdee = bmr*fAF; 
} 

等等。

0

声明意图对象,因为你声明fTdee,然后把fTdee值放在if-else语句中。 float fAF; float fTdee; String strAF = tvAF.getText()。toString(); Intent in2 = new Intent(getApplicationContext(),CaloriesPage.class);

if (strAF.matches("OptionA")){ 
fAF = 1.20f; 
fTdee = bmr*fAF; 
in2.putExtra("mTdee",fTdee); 
}else if (strAF.matches("OptionB")){ 
fAF = 1.375f; 
fTdee = bmr*fAF; 
in2.putExtra("mTdee",fTdee); 
}else if (strAF.matches("OptionC")){ 
fAF = 1.55f; 
fTdee = bmr*fAF; 
in2.putExtra("mTdee",fTdee); 
}else if (strAF.matches("OptionD")){ 
fAF = 1.725f; 
fTdee = bmr*fAF; 
in2.putExtra("mTdee",fTdee); 
}else if (strAF.matches("OptionE")){ 
fAF = 1.90f; 
fTdee = bmr*fAF; 
in2.putExtra("mTdee",fTdee); 
} 
startActivity(in2); 

后记:如果你与你写 fTdee = BMR * FAF上述soultion看; in2.putExtra(“mTdee”,fTdee); 一次又一次在if-else块被redendunt。所以要避免这一点,你可以在外面声明fTdee的if-else块,可以做一些这样的事

float fAF=1.0f; 
float fTdee; 
String strAF = tvAF.getText().toString(); 
if (strAF.matches("OptionA")){ 
fAF = 1.20f; 
}else if (strAF.matches("OptionB")){ 
fAF = 1.375f; 
}else if (strAF.matches("OptionC")){ 
fAF = 1.55f; 
}else if (strAF.matches("OptionD")){ 
fAF = 1.725f; 
}else if (strAF.matches("OptionE")){ 
fAF = 1.90f; 
} 
Intent in2 = new Intent(getApplicationContext(), CaloriesPage.class); 
fTdee = bmr*fAF; 
in2.putExtra("mTdee",fTdee); 
startActivity(in2); 
0

在此代码不能出示担保是fTdee被初始化,当您使用它。您可以在if-else语句树的末尾添加else语句。

final float fAF; 
    String strAF = tvAF.getText().toString(); 
    float fTdee = 0.0; 
    if (strAF.matches("OptionA")) { 
     fAF = 1.20f; 
     fTdee = bmr * fAF; 
    } else if (strAF.matches("OptionB")) { 
     fAF = 1.375f; 
     fTdee = bmr * fAF; 
    } else if (strAF.matches("OptionC")) { 
     fAF = 1.55f; 
     fTdee = bmr * fAF; 
    } else if (strAF.matches("OptionD")) { 
     fAF = 1.725f; 
     fTdee = bmr * fAF; 
    } else if (strAF.matches("OptionE")) { 
     fAF = 1.90f; 
     fTdee = bmr * fAF; 
    } else { 
     fTdee = 0f; //some default value 
     //or throw IllegalStateException if it is not possible for execution of your code 
     //throw new IllegalStateException(); 
    } 


    Intent in2 = new Intent(getApplicationContext(), CaloriesPage.class); 
    in2.putExtra("mTdee", fTdee); 
    startActivity(in2);