2016-09-15 2 views
-4

Я очень новичок в программировании и Java. Я пытаюсь использовать else, если присваивать значение переменной, если они выбрали правильный ввод. Но всякий раз, когда я пытаюсь скомпилировать его, он говорит, что он не может найти переменную.Java, использующий else, если назначить значение

import java.util.Scanner; 

public class TDEE 
{ 
    public static void main(String[] args) 
    { 

    Scanner in = new Scanner(System.in); 

    double tdee = 0.0; 

    System.out.print("Please enter your name: "); 
    String name = in.next(); 

    System.out.print("Please enter your BMR: "); 
    double bmr = in.nextDouble(); 

    System.out.print("Please enter your Gender (M/F): "); 
    String gender = in.next(); 
    System.out.println(); 

    // providing menu items 
    System.out.println("Select your activity level: "); 
    System.out.println("[0] Resting (Sleeping. Reclining)"); 
    System.out.println("[1] Sedentary (Minimal Movement)"); 
    System.out.println("[2] Light (Sitting, Standing)"); 
    System.out.println("[3] Moderate (Light Manual Labor, Dancing, Riding Bike)"); 
    System.out.println("[4] Very Active (Team Sports, Hard Manual Labor)"); 
    System.out.println("[5] Extremely Active (Full-time Athlete, Heavy Manual Labor)"); 
    System.out.println(); 

    // accept user choice with a Scanner class method 
    System.out.print("Enter the number corresponding to your activty level(0,1,2,3,4, or 5): "); 
    String choice = in.next(); 
    System.out.println(); 

    if(choice.equalsIgnoreCase("0")) 
    { 
     double activityFactor = 1.0; 
    } 

    else if(choice.equalsIgnoreCase("1")) 
    { 
     double activityFactor = 1.3; 
    } 

    else if(choice.equalsIgnoreCase("2") && "M".equals(gender)) 
    { 
     double activityFactor = 1.6; 
    } 

    else if(choice.equalsIgnoreCase("2") && "F".equals(gender)) 
    { 
     double activityFactor = 1.5; 
    } 

    else if(choice.equalsIgnoreCase("3") && "M".equals(gender)) 
    { 
     double activityFactor = 1.7; 
    } 

    else if(choice.equalsIgnoreCase("3") && "F".equals(gender)) 
    { 
     double activityFactor = 1.6; 
    } 

    else if(choice.equalsIgnoreCase("4") && "M".equals(gender)) 
    { 
     double activityFactor = 2.1; 
    } 

    else if(choice.equalsIgnoreCase("4") && "F".equals(gender)) 
    { 
     double activityFactor = 1.9; 
    } 

    else if(choice.equalsIgnoreCase("5") && "M".equals(gender)) 
    { 
     double activityFactor = 2.4; 
    } 

    else if(choice.equalsIgnoreCase("5") && "F".equals(gender)) 
    { 
     double activityFactor = 2.2; 
    } 

    else 
    { 
     System.out.println("You did not choose a valid manu option."); 
    } 

    tdee = bmr * activityFactor; 

    System.out.println(); 
    System.out.println("Name: " + name + "  Gender: " + gender); 
    System.out.println("BMR: " + bmr + "  Activity Factor: " + activityFactor); 
    System.out.println("TDEE: " + tdee); 
    } 
} 
+0

Возможный дубликат [Синтаксис Вопрос ЕСЛИ ЭЛЕС (Java)] (http://stackoverflow.com/questions/1496435/syntax-question-if-else-java) – Nikhil

ответ

4

Причина не компиляция из-за неопределенности. Переменная, которую вы объявляете, находится внутри оператора if. Это дает ему возможность, доступ к нему, только в заявлении if. Чтобы ссылаться на него вне оператора if, вы должны объявить его в пределах области, к которой вы хотите получить доступ. Затем вы можете присвоить ему значения, например, activityFactor = 1.0;, в операциях if else. Там, где вы объявляете свои переменные, определяется, что можно получить к ним.

Вы должны объявить double activityFactor за пределами сообщений if else. Просто добавьте double activityFactor; выше заявлений и замените все double activityFactor на activityFactor, и он должен скомпилировать.

Смежные вопросы