2013-08-31 4 views
1

Вот мой код:Строка переменной не может быть инициализирован

import java.util.Scanner; 

public class empMod 

{ 
public static void main(String[] args) 
    { 
    int choice; 

    Scanner input = new Scanner(System.in); 

    do 
     { 
     choice = -1; 
     System.out.println("Employee Data:"); 
     System.out.println("1. - Employee Name:"); 
     System.out.println("2. - Employee Hire Date:"); 
     System.out.println("3. - Employee Address:"); 
     System.out.println("4. - Employee Number:"); 
     System.out.println("5. - Exit"); 

     choice = input.nextInt(); 
     input.nextLine(); 

     switch (choice) 
      { 
      case 1: 

      String empName = new String(); 
      System.out.println("Enter the name of the employee:"); 
      String name = input.nextLine(); 
      break; 

      case 2: 

      String empDate = new String(); 
      System.out.println("Enter the hire date of the employee:"); 
      String date = input.nextLine(); 
      break; 

      case 3: 

      String empAddress = new String(); 
      System.out.println("Enter the address of the employee:"); 
      String address = input.nextLine(); 
      break; 

      case 4: 

      String empNumb = new String(); 
      System.out.println("Enter the Employee number:"); 
      int number = input.nextInt(); 
      break; 

      case 5: 

      System.out.print("\n"); 
      System.out.println("The name of the employee is: " + empName); // <-- This is the line where the error occurs. 
      break; 

      default: 
      continue; 
      } 

     } 
    while (choice != 6); 
    } 
} 

Целью программы является наличие пользовательского ввода информации о работнику, а затем по желанию, есть информация, отображаемая. Когда я скомпилировать программу, я получаю следующее сообщение об ошибке:

empMod.java:57: error: variable empName might not have been initialized 
           System.out.println("The name of the employee is: 
" + empName); 

    ^

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

+0

@SotiriosDelimanolis Так что, если у меня есть код распечатать информацию за пределами заявления выключателя, будет та работа? – Boxasauras

ответ

1

switch (choice) и case с позже, означает, что в соответствии со значением в switch (выбор) один из case будет выбран. Если это будет 5, ваша переменная не будет инициализирована.

Вам необходимо инициализировать empName до switch, из каждого case в whitch используется.

И вы не должны использовать String empName = new String();, но String empName = ""; - он будет использовать пул строк.

+0

Итак, если у меня есть код, распечатывающий информацию за пределами оператора switch, это сработает? – Boxasauras

1

Переменная empName инициализируется только в разделе case 1. Итак, что произойдет, если этот блок никогда не был выполнен, а раздел case 5 был? Что будет напечатано, так как переменная никогда не была инициализирована ничем?

Добавить

String empName = ""; 

перед циклом.

0

A switch блок содержит область. Переменные, объявленные в этой области, могут использоваться только там. Подумайте о switch как несколько if-else s. Если if (case), который инициализирует вашу переменную, не будет выполнен, тогда вы останетесь с неинициализированной переменной. Об этом жалуется компилятор.

В

case 5: 
    System.out.print("\n"); 
    System.out.println("The name of the employee is: " + empName); // <-- This is the line where the error occurs. 
    break; 

empName только инициализируется, если выполнение протекало через все случаи (то есть. choice имел значение 1, и ваши дела не были перерывы). Но компилятор не может быть уверен в этом.

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

String empName = "Not a Name"; 
+0

Это не вопрос масштаба.Переменная видима из раздела 5 корпуса, потому что она находится в том же блоке, что и секция case 1. Но нет никакой гарантии, что он был инициализирован. –

+0

@JBNizet Конечно. Он не будет инициализирован наверняка, потому что выполнение может не пройти через все случаи. –

0

Поскольку ИНТ case 5, вы не определили String empName = new String();, вы можете определить EmpName в основных

public static void main(String[] args) 
{ 
    int choice; 
    String empName = "Not a name"; 
    Scanner input = new Scanner(System.in); 

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