簡體   English   中英

使用switch語句后變量不可用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM