字符串变量可能尚未初始化

时间:2013-08-31 16:12:44

标签: java string variables initialization

这是我的代码:

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);

     ^

虽然字符串变量在另一种情况下被初始化,所以我不确定问题。

4 个答案:

答案 0 :(得分:1)

switch (choice)case s后来意味着,根据switch(选择)中的值,将选择case中的一个。5。如果它是empName,则不会初始化您的变量。

您需要在switch之前初始化case,并在每个String empName = new String ();中初始化String empName = "";

你不应该使用{{1}}但{{1}} - 它将使用字符串池。

答案 1 :(得分:1)

empName变量仅在case 1部分初始化。那么,如果这个块从未被执行过,那么case 5部分是什么呢?什么会被打印,因为变量从未被初始化为任何东西?

添加

String empName = "";
在循环之前

答案 2 :(得分:0)

switch块包含范围。在该范围内声明的变量只能在那里使用。将switch视为多个if-else。如果初始化变量的ifcase)没有被执行,那么你将留下一个未初始化的变量。这就是编译器所抱怨的。

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";

答案 3 :(得分:0)

因为int case 5,你没有定义String empName = new String ();,你可以在main中定义empName

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

...