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

     ^

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

4

4 回答 4

2

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

添加

String empName = "";

在循环之前。

于 2013-08-31T16:17:14.833 回答
1

switch (choice)后面case的意思是,根据switch(choice) 中的值,case将选择其中之一。如果是5,您的变量将不会被初始化。

您需要在使用它的每个步骤empName之前进行初始化。switchcase

而且您不应该使用String empName = new String ();但是String empName = "";-它将使用字符串池。

于 2013-08-31T16:15:24.860 回答
0

一个switch块包含一个范围。在该范围内声明的变量只能在该范围内使用。将sswitch视为多个if-elses。如果初始化您的变量的if(the 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";
于 2013-08-31T16:17:58.930 回答
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);

...
于 2016-09-27T09:24:17.603 回答