Java条件语句/初始化变量

时间:2012-12-15 23:22:56

标签: java

目前这是我的代码,当用户不选择A,B,C,D,E或F时,我需要显示“请输入有效选项”。问题是如果我在“else”条件上放置语句“请输入有效的....”,Java会要求我初始化变量ActivityFactor,因为如果用户没有选择正确的选择则不会有一个。有谁知道如何解决这个问题?或者任何想法我应该如何编写一个程序来做这个?

if((inGender.equalsIgnoreCase("M") ||(inGender.equalsIgnoreCase ("F"))) && inActivity.equalsIgnoreCase("A"))
            ActivityFactor = 1.0;

        else if ((inGender.equalsIgnoreCase("M") ||(inGender.equalsIgnoreCase ("F"))) && inActivity.equalsIgnoreCase("B"))
        ActivityFactor = 1.3;

        else if (inGender.equalsIgnoreCase("M") && inActivity.equalsIgnoreCase("C"))
        ActivityFactor = 1.6;
        else if (inGender.equalsIgnoreCase("F") && inActivity.equalsIgnoreCase("C"))
        ActivityFactor = 1.5;
        else if (inGender.equalsIgnoreCase("M") && inActivity.equalsIgnoreCase("D"))
        ActivityFactor = 1.7;
        else if (inGender.equalsIgnoreCase("F") && inActivity.equalsIgnoreCase("D"))
        ActivityFactor = 1.6;
        else if (inGender.equalsIgnoreCase("M") && inActivity.equalsIgnoreCase("E"))
        ActivityFactor = 2.1;
        else if (inGender.equalsIgnoreCase("F") && inActivity.equalsIgnoreCase("E"))
        ActivityFactor = 1.9;
        else if (inGender.equalsIgnoreCase("M") && inActivity.equalsIgnoreCase("F"))
        ActivityFactor = 2.4;
        else if (inGender.equalsIgnoreCase("F") && inActivity.equalsIgnoreCase("F"))
        ActivityFactor = 2.2;
        else
        {
       ActivityFactor = -1;

    }

    //After
    if(ActivityFactor != -1){
     tdee = (nBMR * ActivityFactor);
     System.out.println(tdee);}
    else
   { System.out.println("Please enter a valid choice");
    }

5 个答案:

答案 0 :(得分:2)

如果if语句中没有条件为真,那么您不会向ActivityFactor分配任何内容,并且在行double TDEE = (nBMR * ActivityFactor);中使用时不会对其进行初始化。

在你在这里显示的代码之前初始化它,在最后一种情况下给它一个默认值,或者循环直到你得到一个有效值。

答案 1 :(得分:1)

在循环之前初始化变量,或者将整个循环放在函数中,然后执行以下操作:

double TDEE = (nBMR * getActivityFactor());

另外,请看一下:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

快乐的编码! ;)

答案 2 :(得分:1)

在条件之前将ActivityFactor初始化为常规值。

例如,你可以这样做:

// knowing that it can never be -1
// so if that value remains, you know that user entered wrong letter
ActivityFactor = -1

// then the conditional begins
if((inGender.equalsIgnoreCase("M") ||(inGender.equalsIgnoreCase ("F"))) && inActivity.equalsIgnoreCase("A"))
...

// after conditional...
if(activityFactor != -1){
    double TDEE = (nBMR * ActivityFactor);
}

顺便说一句,我建议您使用'activityFactor'而不是ActivityFactor。

答案 3 :(得分:0)

你应该做两件事:

  1. 将方法中的逻辑包含在
  2. 如果参数与方法逻辑不匹配,则抛出异常。
  3. 您可以解决此问题,抛出您将捕获的异常。

    private double getTDEE (String inGender, String inActivity) {
    
       //logic
       else {
         throw new IllegalArgumentException("Please enter a valid choice");
       }
    
      return (nBMR * ActivityFactor);
    }
    

    Exception tutorial

答案 4 :(得分:0)

正如您已经知道的那样,代码的问题在于无论用户是否输入了有效输入,执行都会继续执行。因此,需要进行大量重构 - 我还会尝试使条件语句更漂亮一些;但这是个人偏好。

可能的解决方案:

a)使用循环 - 然后在用户输入满意的输入时中断循环..

while( true ){ 
   /* get input from the user */

   /* run through validation checks... 
        and -break- out of the loop when they're satisfied */
}
/* do calculations here */

b)使用函数抽象出所有这些逻辑..(正如Psyclops建议的那样)

就个人而言,我会使用这些方法的组合 - 将所有这些逻辑提取到一个函数中,该函数在没有输入有效输入时返回false,然后使用像while(! yourFunction() )这样的构造来简单地循环直到它完成。您可以使用通过引用传递,以避免必须将返回类型用于布尔值以外的任何内容。

我不会在循环之前初始化变量!这只是意味着程序将继续执行;但它没有任何适当的数据 - 这可能比刚刚崩溃的应用程序更糟糕。

我还没有完全给你代码中的答案 - 但希望这是一个让你思考如何在概念上构思/设计这样一个解决方案的起点。这通常是最困难的部分..;)祝你好运。