2011-02-28 43 views
1

我是一個大學生做一個Java功課。我創建了這個程序,允許用戶輸入工作信息。我需要幫助,我的Java程序返回沒事的時候我編譯它

的問題是,我的程序不回輸入的信息。

我看我一會程序,但我知道這是一些簡單的我失蹤。

public class Employee 
{ 
    String name;    // Employee name 
    String employeeNumber; // Employee number 
    String hireDate;   // Employee hire date 
    int shift;     // Employee shift 
    double payRate; 

    public void setEmployeeNumber(String e) 
    { 
     if (isValidEmpNum(e)) 
     { 
      employeeNumber = e; 
     } 
     else 
     { 
      employeeNumber = ""; 
     } 
    } 

    public Employee(String name, String e, String hireDate, double payRate, int shift) 
    { 
     this.name = name; 
     this.setEmployeeNumber(e); 
     this.hireDate = hireDate; 
     this.payRate = payRate; 
     this.shift = shift; 
    } 

    public Employee() 
    { 
     name = ""; 
     employeeNumber = ""; 
     hireDate = ""; 
    } 

    public void setpayRate(double payRate) 
    { 
     this.payRate = payRate; 
    } 

    public double getpayRate() 
    { 
     return payRate; 
    } 

    public void setshift(int shift) 
    { 
     this.shift = shift; 
    } 

    public int getshift() 
    { 
     return shift; 
    } 


    public void setName(String name) 
    { 
     this.name = name; 
    } 

    public void setHireDate(String hireDate) 
    { 
     this.hireDate = hireDate; 
    } 

     public String getName() 
    { 
     return name; 
    } 

    public String getEmployeeNumber() 
    { 
     return employeeNumber; 
    } 

    public String getHireDate() 
    { 
     return hireDate; 
    } 

    private boolean isValidEmpNum(String e) 
    { 
     boolean status = true; 

     if (e.length() != 5) 
      status = false; 
     else 
     { 
     if ((!Character.isDigit(e.charAt(0))) || 
      (!Character.isDigit(e.charAt(1))) || 
      (!Character.isDigit(e.charAt(2))) || 
      (e.charAt(3) != '-')    || 
      (!Character.isLetter(e.charAt(4))) || 
      (!(e.charAt(4)>= 'A' && e.charAt(4)<= 'M'))) 
      { 
      status = false; 
      } 
     } 
     return status; 
    } 
    public String toString() 
    { 
     String str = "Name: " + name + "\nEmployee Number: "; 

     if (employeeNumber == "") 
     { 
      str += "INVALID EMPLOYEE NUMBER"; 
     } 
     else 
     { 
      str += employeeNumber; 
     } 

     str += ("\nHire Date: " + hireDate); 
     return str; 
    } 
} 

我在另一個類中聲明瞭這個。

import javax.swing.JOptionPane; 

public class ProductionWorkerDemo extends Employee 
{ 
    public static void main(String[] args) 
    { 
     String name;    // Employee name 
     String employeeNumber; // Employee number 
     String hireDate;   // Employee hire date 
     int shift;     // Employee shift 
     double payRate;    // Employee pay 
     String str; 
     String str2; 


     name = JOptionPane.showInputDialog("Enter your name: "); 

     employeeNumber = JOptionPane.showInputDialog("Enter your employee number: "); 

     hireDate = JOptionPane.showInputDialog("Enter your hire date: "); 

     str = JOptionPane.showInputDialog("Enter your shift: "); 

     payRate = Double.parseDouble(str); 

     str2 = JOptionPane.showInputDialog("Enter your payrate: "); 

     payRate = Double.parseDouble(str2); 

     ProductionWorkerDemo pw = new ProductionWorkerDemo(); 

     System.out.println(); 
     System.out.println("Name: " + pw.getName()); 
     System.out.println("Employee Number: " + pw.getEmployeeNumber()); 
     System.out.println("Hire Date: " + pw.getHireDate()); 
     System.out.println("Pay Rate: " + pw.getpayRate()); 
     System.out.println("Shift: " + pw.getshift()); 

    } 
} 
+0

無法讀取的格式不幸,我忍不住要修復它。 – alternative 2011-03-01 00:03:52

回答

1

您只在本地變量上設置員工信息。您沒有將它們傳遞給ProductionWorkerDemo,也不是它的超類Employee。

  1. 您不需要通過ProductionWorkerDemo擴展員工,因爲ProductionWorkerDemo不是員工。您可以刪除擴展的員工文本。

  2. 你不是傳遞變量給僱員。你已經創建了一個Employee類是需要他們構造都讓你可以用它

    Employee pw = new Employee(name, employeeNumber, hireRate, payRate, shift);

  3. 現在你會發現,你有沒有要求的轉變。

+0

謝謝Aleksi工作。 – lonesarah 2011-03-01 00:12:57

+0

Aleksi你是什麼意思我不是要求換班? – lonesarah 2011-03-01 00:14:12

+0

您有一個對話框要求轉移,但您將其分配給payrate變量。 – 2011-03-01 00:15:09

3

您需要使用適當的構造函數或set*方法來設置對象上的字段。目前,它們都是空的,因此get*方法不返回任何值或默認值。

此外,您不應該將Employee與包含main方法的類一起擴展,直接使用Employee類(從類繼承的想法是擴展它,在您的情況下,您只需要它作爲對象)保存數據,所以不要從中派生出來,但使用它):

import javax.swing.JOptionPane; 

public class ProductionWorkerDemo 
{ 
    public static void main(String[] args) 
    { 
     String name;    // Employee name 
     String employeeNumber; // Employee number 
     String hireDate;   // Employee hire date 
     int shift;     // Employee shift 
     double payRate;    // Employee pay 
     String str; 
     String str2; 


     name = JOptionPane.showInputDialog("Enter your name: "); 

     employeeNumber = JOptionPane.showInputDialog("Enter your employee number: "); 

     hireDate = JOptionPane.showInputDialog("Enter your hire date: "); 

     str = JOptionPane.showInputDialog("Enter your shift: "); 

     payRate = Double.parseDouble(str); 

     str2 = JOptionPane.showInputDialog("Enter your payrate: "); 

     payRate = Double.parseDouble(str2); 

     Employee pw = new Employee(/*provide arguments here*/); 

     System.out.println(); 
     System.out.println("Name: " + pw.getName()); 
     System.out.println("Employee Number: " + pw.getEmployeeNumber()); 
     System.out.println("Hire Date: " + pw.getHireDate()); 
     System.out.println("Pay Rate: " + pw.getpayRate()); 
     System.out.println("Shift: " + pw.getshift()); 

    } 
} 
+0

是我的設置,並在Employee類中獲取方法錯誤。或者我需要他們在ProductionWorkerDemo類 – lonesarah 2011-03-01 00:06:06

+0

這並不是說在那裏是錯的。因爲他們在員工中,而且他們是公開的,所以你也可以在生產工作流程中使用他們。問題是你沒有使用它們。 – corsiKa 2011-03-01 00:08:26

0

你在你的main方法中聲明瞭名字,僱傭號等變量。當你嘗試使用它們時,它會使用這些,而不是你的類變量。

你爲什麼不嘗試使基於您在Employee類中定義構造一個新的ProductionWorkerDemo?

ProductionWorkerDemo pw = new ProductionWorkerDemo(name,employeeNumber,hireDate,payRate,shift); 

而且也,你payRate被分配兩次,你應該改變的第一個轉變,並使用的Integer.parseInt

0

您有局部變量在main()其值的設置。然後創建一個ProductionWorkerDemo對象,由於構造函數以這種方式設置它們,該對象具有相同名稱的實例變量,但都是最初爲空的。

你永遠不會傳遞到您的ProductionWorkerDemo對象的局部變量,所以當你調用干將,他們返回空值。

1

首先,你需要添加構造你的演示類:

public class ProductionWorkerDemo extends Employee{ 

    public ProductionWorkerDemo(String name, String e, String hireDate, double payRate, nt shift){ 
{ 
    super(name, e, hireDate, payRate, shift); 
    } 

} 

然後在你的類,你需要實例:

0

我解決這個問題,我的節目,感謝幫助大家。

我沒有將變量傳遞給員工。

我將此語句添加到ProductionWorkerDemo類中。

Employee pw = new Employee(name,employeeNumber,hireRate,payRate,shift);

P.S.你可以關閉這個線程。