[英]Variable not available after using a switch statement?
所以這是我的作業,對我來說這似乎是一個可變范圍的問題。 我嘗試定義一個全局變量,但可能做錯了,因為這似乎也無法滿足我的編譯器的要求。 我目前正在使用SublimeText2進行代碼編寫,但似乎並沒有太大幫助。 我應該使用Eclipse還是Aptana Studio之類的IDE?
// EmployeeBonus2.java - This program calculates an employee's yearly bonus.
import javax.swing.*;
public class EmployeeBonus2
{
public class Globals {
public double employeeBonus;
}
public static void main(String args[])
{
// Declare and initialize variables.
String employeeName;
String salaryString;
double employeeSalary;
String ratingString;
int employeeRating;
double employeeBonus;
final double BONUS_1 = .15;
final double BONUS_2 = .10;
final double BONUS_3 = .06;
final double NO_BONUS = 0.00;
final int RATING_1 = 1;
final int RATING_2 = 2;
final int RATING_3 = 3;
// This is the work done in the housekeeping() method
// Get user input.
employeeName = JOptionPane.showInputDialog("Enter employee's name: ");
salaryString = JOptionPane.showInputDialog("Enter employee's yearly salary: ");
ratingString = JOptionPane.showInputDialog("Enter employee's performance rating: ");
// Convert Strings to int or double.
employeeSalary = Double.parseDouble(salaryString);
employeeRating = Integer.parseInt(ratingString);
switch(employeeRating)
{
case 1: employeeBonus = (employeeSalary * BONUS_1);
break;
case 2: employeeBonus = (employeeSalary * BONUS_2);
break;
case 3: employeeBonus = (employeeSalary * BONUS_3);
break;
};
// This is the work done in the endOfJob() method
// Output.
System.out.println("Employee Name " + employeeName);
System.out.println("Employee Salary $" + employeeSalary);
System.out.println("Employee Rating " + employeeRating);
System.out.println("Employee Bonus $" + employeeBonus);
System.exit(0);
}
}
嘗試編譯時出現此錯誤。
EmployeeBonus2.java:54: variable employeeBonus might not have been initialized
System.out.println("Employee Bonus $" + employeeBonus);
如果沒有case
語句匹配,則需要一個default
case。
擴展路易斯的答案:改變
switch(employeeRating)
{
case 1: employeeBonus = (employeeSalary * BONUS_1);
break;
case 2: employeeBonus = (employeeSalary * BONUS_2);
break;
case 3: employeeBonus = (employeeSalary * BONUS_3);
break;
};
至
switch(employeeRating)
{
case 1: employeeBonus = (employeeSalary * BONUS_1);
break;
case 2: employeeBonus = (employeeSalary * BONUS_2);
break;
case 3: employeeBonus = (employeeSalary * BONUS_3);
break;
default: employeeBonus = (employeeSalary * NO_BONUS);
break;
};
我在那里保持乘法以保持計算不變,因此,如果“無獎金”的概念變為“沒有個人獎金,但給沒有獎金的每個人都提供0.5%”, NO_BONUS
可以將NO_BONUS
設置為0.5%它會工作。 不太可能,但這只是為什么會這樣的一個示例。 否則,只需將employeeBonus
設置為0或employeeBonus = NO_BONUS
。 由你決定。
問題是您的第54行,即System.out.println("Employee Bonus $" + employeeBonus);
正在給出一個編譯時錯誤 , 表明本地變量employeeBonus
可能尚未初始化 。
這可以通過在第18行初始化employeeBonus變量來解決,如下所示: double employeeBonus = 0;
要不然
在您的switch語句中添加一個default
案例,如下所示:
default:
employeeBonus = 0;
在方法內部聲明變量(局部變量)時,必須先初始化局部變量,然后才能使用該變量。 在您的情況下,請為employeeBonus提供默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.