2012-03-06 69 views
0

所以這是我的家庭作業,對我來說這似乎是一個變量範圍的問題。我試圖定義一個全局的,但也許我做錯了,因爲這似乎不滿足我的編譯器。我目前使用SublimeText2編寫代碼,但似乎沒有多大幫助。我應該使用Eclipse,Aptana Studio等IDE嗎?使用switch語句後變量不可用?

// 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); 
+0

錯誤表示該變量未初始化。在聲明期間,它始終是一個很好的練習,用一些值初始化變量(可能爲0)。 – Jayy 2012-03-06 09:48:22

+0

@KaipaMSarma指定一個初始值將隱藏錯誤,隱藏每次執行基本上只有一個賦值並且是一個壞主意的事實。 – 2012-03-06 10:04:08

回答

7

您需要在事件default情況下,沒有任何case語句的匹配。

+8

然後在該默認塊中設置employeeBonus的值。或者,您可以在定義它時給employeeBonus一個默認值。 – 2012-03-06 09:42:04

+0

如果您製作'employeeBonus'' final',您將確保您只分配一次。沒有經歷或類似的錯誤。分配初始值會隱藏錯誤,隱藏每次執行基本上只有一個分配的事實,並且這是一個壞主意。 – 2012-03-06 10:03:49

+0

或者,如果您知道默認情況不會發生,只需拋出一個'AssertionError'。 – 2012-03-06 17:20:14

4

擴大在路易斯的回答: 變化

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可以設置爲0.5%,它會起作用。不太可能,但這只是一個例子,爲什麼它是這樣的。否則,只需將employeeBonus設置爲0或employeeBonus = NO_BONUS即可。由你決定。

1

的問題是,你的線#54即System.out.println("Employee Bonus $" + employeeBonus);是給那個局部變量employeeBonus可能沒有被初始化一個編譯時錯誤

這可以通過初始化employeeBonus變量在行#18是這樣解決:double employeeBonus = 0;否則

在switch語句添加一個default情況是這樣的:

default: 
    employeeBonus = 0; 
1

當你聲明變量在一個方法內(局部變量),你必須在使用變量之前初始化局部變量。在你的情況下給employeeBonus一個默認值。