2015-10-16 2 views
1

Я хочу создать программу меню, с различными вариантами:Переменные Ошибки в программе меню

1)Enter Name 
2)Display Name 
3)Change Name 
4)Quit 

Но по какой-то причине я не могу получить переменную, используемую для хранения имени в Q1, которые будут использоваться в Q2!

Вот код: (Ошибка возникает в случае 2, с переменной full_name подчеркнута красной и не работает)

package Testing; 
import java.util.Scanner ; 
public class Menu { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Scanner in = new Scanner(System.in); 
    // print menu 
    for (int i = 1; i <= 5; i++) 
      System.out.println(i + ". Menu item #" + i); 
    System.out.println("0. Quit"); 
    // handle user commands 
    boolean quit = false; 
    int menuItem; 
    do { 
      System.out.print("Choose menu item: "); 
      menuItem = in.nextInt(); 
      switch (menuItem) { 
      case 1: 
       System.out.println("You've chosen item #1"); 
       { 
        Scanner user_input = new Scanner(System.in); 

        String first_name; 
        System.out.print("Enter your first name: "); 
        first_name = user_input.next(); 

        String family_name; 
        System.out.print("Enter your family name: "); 
        family_name = user_input.next(); 

        String full_name; 
        full_name = first_name + " " + family_name; 

        System.out.println("You are " + full_name); 
       } 

       break; 
      case 2: 
       System.out.println("You've chosen item #2"); 
       System.out.println("You are " + full_name); 
       break; 
      case 3: 
       System.out.println("You've chosen item #3"); 
       // do something... 
       break; 
      case 4: 
       System.out.println("You've chosen item #4"); 
       // do something... 
       break; 
      case 5: 
       System.out.println("You've chosen item #5"); 
       // do something... 
       break; 
      case 0: 
       quit = true; 
       break; 
      default: 
       System.out.println("Invalid choice."); 
      } 
    } while (!quit); 
    System.out.println("Bye-bye!"); 
} 
} 
+1

Переменная не объявлена ​​в области, где 'case2' может ее видеть. Переместите объявления переменных за пределы 'do'. – RealSkeptic

+0

Вы должны объявить переменные за пределами своего цикла. –

ответ

0
import java.util.Scanner ; 
public class Menu { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Scanner in = new Scanner(System.in); 
    // print menu 
    for (int i = 1; i <= 5; i++) 
      System.out.println(i + ". Menu item #" + i); 
    System.out.println("0. Quit"); 
    // handle user commands 
    //The name 
    String first_name = ""; 
    String family_name = ""; 
    String full_name = ""; 
    while(true) { 
      System.out.print("Choose menu item: "); 
      int menuItem = 0; 
      try { // If you enter a string it will throw an exception! 
       menuItem = in.nextInt(); 
      } catch(Exception e) { 
       System.out.println(e.getMessage()); 
      } 
      switch (menuItem) { 
      case 1: 
       System.out.println("You've chosen item #1"); 
       System.out.print("Enter your first name: "); 
       first_name = in.next(); 

       System.out.print("Enter your family name: "); 
       family_name = in.next(); 

       full_name = first_name + " " + family_name; 
       System.out.println("You are " + full_name); 
       break; 
      case 2: 
       System.out.println("You've chosen item #2"); 
       System.out.println("You are " + full_name); 
       break; 
      case 3: 
       System.out.println("You've chosen item #3"); 
       // do something... 
       break; 
      case 4: 
       System.out.println("You've chosen item #4"); 
       // do something... 
       break; 
      case 5: 
       System.out.println("You've chosen item #5"); 
       // do something... 
       break; 
      case 0: 
       System.out.println("bye-bye"); 
       System.exit(0); // Exit 
       break; 
      default: 
       System.out.println("Invalid choice."); 
      } 
     } 
    } 
} 
1

Вы должны положить full_name вне цикла, поскольку в настоящее время он находится в локальной области, которая недоступен из других случаев.

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