这是我的代码:
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 :(得分: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
。如果初始化变量的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";
答案 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);
...