2012-11-28 57 views
0

在java中我是一個begginer,當我嘗試運行我的程序時被困惑... 我編譯後顯示編譯成功 但是一旦我嘗試運行它,它顯示我這個消息。編譯成功但在運行時發生錯誤

Exception in thread "main" java.lang.NoSuchMethodError: employee.<init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;D)V 
    at academic.<init>(academic.java:19) 
    at testEmployee.main(testEmployee.java:16) 

Process completed. 

我創建了一個超類和2個子類。我仍然不確定我的代碼,無法自己發現問題。 這是我的代碼。

employee.java

public class employee { 
    protected String id; 
    protected String name; 
    protected String ic; 
    protected String tel; 
    protected double salary; 
    protected boolean showEmployee; 
    protected static int count; 

    public employee(){ 
     id ="A00000"; 
     name = "Michele Wong"; 
     ic = "920412-14-5443"; 
     tel = "014-6667733"; 
     salary = 999.00; 
    } 

    public employee(String id, String name, String ic, String tel, double salary, boolean showEmployee) { 
     this.id = id; 
     this.name = name; 
     this.ic = ic; 
     this.tel = tel; 
     this.salary = salary; 
     this.showEmployee = showEmployee; 
     count++; 
    } 
     public void setId(String id){ 
     this.id = id; 
     } 

     public String getId(){ 
     return id; 
     } 

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

     public String getName(){ 
     return name; 
     } 

     public void setIc(String ic){ 
     this.ic = ic; 
     } 

     public String getIc(){ 
     return ic; 
     } 

     public void setTel(String tel){ 
     this.tel = tel; 
     } 

     public String getTel(){ 
     return tel; 
     } 

     public void setSalary(double salary){ 
     this.salary = salary; 
     } 

     public double getSalary(){ 
     return salary; 
     } 

     public void setShowEmployee(boolean showEmployee){ 
     this.showEmployee = showEmployee; 
     } 

     public boolean getShowEmployee(){ 
     return this.showEmployee; 
     } 

     public String toString(){ 
     return getId()+ "\t\t\t" +getName()+ "\t\t" +getIc()+ "\t\t" +getTel()+"\t\t"; 
     } 
} 

admin.java

public class admin extends employee{ 
    private String position; 
    private String department; 

    public admin() { 
     super(); 
    } 

    public admin(String id, String name, String ic, String tel, double salary, String position, String department) { 
     super(id, name, ic, tel, salary); 
     this.position = position; 
     this.department = department; 

    } 

    public void setPosition(String position){ 
     this.position = position; 
    } 

    public String getPosition(){ 
     return position; 
    } 

    public void setDepartment(String department){ 
     this.department = department; 
    } 

    public String getDepartment(){ 
     return department; 
    } 

    public double calculateSalary(){ 
     return super.getSalary() + 100; 
    } 

    public void DeleteAdmin(){ 

    } 

    public String toString(){ 
     return super.toString()+ "\t" +getPosition()+ "\t\t\t" +getDepartment()+ "\t\t\t" +calculateSalary(); 
    } 


} 

academic.java

public class academic extends employee{ 
    private String subject; 
    private String school; 

    public academic(){ 
     super(); 
    } 

    public academic(String id, String name, String ic, String tel, double salary, String subject, String school){ 
     super(id, name, ic, tel, salary); 
     this.subject = subject; 
     this.school = school; 

    } 

    public void setSubject(String subject){ 
     this.subject = subject; 
    } 

    public String getSubject(){ 
     return subject; 
    } 

    public void setSchool(String school){ 
     this.school = school; 
    } 

    public String getSchool(){ 
     return school; 
    } 

    public double calculateSalary(){ 
     return super.getSalary() + 50; 
    } 

    public String toString(){ 
     return super.toString()+ "\t" +getSubject()+ "\t\t" +getSchool()+"\t\t\t" +calculateSalary() ; 
    } 


} 

testEmployee.java

 import java.util.*; 
    public class testEmployee { 
     private static int totalEmployee = 8; 
     private static int employeeID = 1000; 

     public static void main(String[]args){ 

      academic[] aca = new academic[4]; 
      aca[0] = new academic("A10001", "Jennifer Lee", "930307-14-5556", "012-3456712", 990.00, "Programming", "SAS"); 
      aca[1] = new academic("A10002", "Harry Tan", "950402-12-2233", "012-1234598", 980.00, "Accounting", "SSH"); 
      aca[2] = new academic("A10003", "Kelvin Woo", "981225-13-1456", "016-5803157", 990.00, "English for Science", "SBS"); 
      aca[3] = new academic("A10004", "Terry Yap", "911030-14-5678", "014-9126534", 990.00, "Java", "SAS"); 

      admin[] admin = new admin[4]; 
      admin[0] = new admin("A10005", "David Foo", "910922-14-9008", "014-1489763", 1000.00, "Head of Division", "SAS"); 
      admin[1] = new admin("A10006", "Danny Choo", "930302-15-4443", "012-0987634", 990.00, "Head of Division", "SAD"); 
      admin[2] = new admin("A10007", "Kelly Tan", "900828-13-3213", "016-8903245", 1100.00,"Head of Division","SOT"); 
      admin[3] = new admin("A10008", "Donald Heng", "900730-12-6789", "016-9823081", 990.00,"Head of Division","SSH"); 
      MainMenu(aca, admin); 
     } 

     //Main Menu 
     public static void MainMenu(employee[] aca,employee[] admin){ 
      Scanner input = new Scanner(System.in); 

      System.out.println("********************\n"); 
      System.out.println("* MAIN MENU *\n"); 
      System.out.println("********************\n"); 
      System.out.println("1. Display Records \n"); 
      System.out.println("2. Search Employee\n"); 
      System.out.println("3. Add Employee\n"); 
      System.out.println("4. Edit Employee\n"); 
      System.out.println("5. Delete Employee\n"); 
      System.out.println("6. Exit \n"); 
      System.out.print("Please enter your selection: "); 
      int selection = input.nextInt(); 

      switch(selection){ 
      case 1: Display(aca, admin); 
      break; 

      case 2: Search(aca, admin); 
      break; 

      case 3: Add(aca, admin); 
      break; 

      case 4: Edit(aca, admin); 
      break; 

      case 5: Delete(aca, admin); 
      break; 

      case 6: 
      System.out.println("Exiting Menu. \nThank you for using the system."); 
      System.exit(3); 
      break; 

      default: 
      System.out.println(" Wrong input!\n"); 
      System.out.println(" Please re-enter \n"); 
      System.out.println("Press Any Key To Continue..."); 
      input.nextLine(); 
      input.nextLine(); 
      MainMenu(aca, admin); 
      break; 
      } 
     } 

     //Display Menu 
     public static void Display(employee[] aca,employee[] admin){ 
      Scanner input = new Scanner(System.in); 
      System.out.println("********************\n"); 
      System.out.println("* DISPLAY MENU *\n"); 
      System.out.println("********************\n"); 
      System.out.println("1. ACADEMIC \n"); 
      System.out.println("2. ADMINISTRATIVE \n"); 
      System.out.println("3. EXIT \n"); 
      System.out.print("Please enter your selection: "); 
      int selection = input.nextInt(); 

      switch(selection){ 
      case 1: AcaDisplay(aca, admin); 
      break; 

      case 2: AdminDisplay(aca, admin); 
      break; 

      default: 
      System.out.println(" Wrong input!\n"); 
      System.out.println(" Please re-enter \n"); 
      System.out.println("Press Any Key To Continue..."); 
      input.nextLine(); 
      input.nextLine(); 
      MainMenu(aca, admin); 
      break; 
      } 
     } 

     //Display Academic Employee Details 
     public static void AcaDisplay(employee[] aca,employee[] admin){ 
      Scanner input = new Scanner(System.in); 
      System.out.println("Employee ID \t Employee Name \t\t Employee IC \t Employee Phone Number \t Subject \t\t School \t Salary "); 
      for(int i=0; i <totalEmployee; i++){ 
       System.out.println(aca[i].toString()); 
      } 

      System.out.print("Continue?(Y/N) "); 
      char choice = input.next().charAt(0); 

      if(choice == 'y' || choice == 'Y'){ 
       MainMenu(aca, admin); 
       } 
       else if(choice == 'n' || choice == 'N'){ 
       System.out.println("Exiting Menu. \nThank you for using the system."); 
       System.exit(3); 
       } 
       else { 
       System.out.print("\nWrong input. \n Please re-type."); 
       AcaDisplay(aca,admin); 
       } 
     } 

     //Display Admin Employee Details 
     public static void AdminDisplay(employee[] aca,employee[] admin){ 
      Scanner input = new Scanner(System.in); 
      System.out.println("Employee ID \t Employee Name \t Employee IC \t Employee Phone Number \tEmployee Position \t\t Department \tSalary "); 
      for(int i=0; i <totalEmployee; i++){ 
       System.out.println(admin[i].toString()); 
      } 
      System.out.print("Continue?(Y/N) "); 
      char choice = input.next().charAt(0); 

      if(choice == 'y' || choice == 'Y'){ 
       MainMenu(aca, admin); 
       } 
       else if(choice == 'n' || choice == 'N'){ 
       System.out.println("Exiting Menu. \nThank you for using the system."); 
       System.exit(3); 
       } 
       else { 
       System.out.print("\nWrong input. \n Please re-type."); 
       AdminDisplay(aca,admin); 
       } 
     } 

     //Search Employee 
     public static void Search(employee[] aca,employee[] admin){ 
      Scanner input = new Scanner(System.in); 
      System.out.print("Enter Employee ID: "); 
      String search = input.nextLine(); 
      for(int i=0; i<totalEmployee; i++){ 
       if(aca[i].getId() == search){ 
        System.out.println("Employee ID \t Employee Name \t\t Employee IC \t Employee Phone Number \t Subject \t\t School \t Salary "); 
        System.out.println(aca[i].toString()); 
        } 

       else if(admin[i].getId() == search){ 
        System.out.println("Employee ID \t Employee Name \t Employee IC \t Employee Phone Number \tEmployee Position \t\t Department \tSalary "); 
        System.out.println(admin[i].toString()); 
        } 
       else { 
        System.out.print("\nWrong input. \n Please re-type."); 
        Search(aca,admin); 
        } 

       } 

     } 

     //Add Employee 
     public static void Add(employee[] aca,employee[] admin){ 
      Scanner input = new Scanner(System.in); 
      System.out.println("********************\n"); 
      System.out.println("* DISPLAY MENU *\n"); 
      System.out.println("********************\n"); 
      System.out.println("1. ACADEMIC \n"); 
      System.out.println("2. ADMINISTRATIVE \n"); 
      System.out.println("3. EXIT \n"); 
      System.out.print("Please enter your selection: "); 
      int selection = input.nextInt(); 

      if(selection == 1) 
       System.out.println("Academic"); 
      else 
       System.out.println("Administrative"); 

      Scanner add = new Scanner(System.in); 
      char choice; 

      do{ 
       System.out.print("\nEnter New Employee ID :"); 
       String newID = add.nextLine(); 
       System.out.print("Enter New Employee Name :"); 
       String newName = add.nextLine(); 
       System.out.print("Enter New Employee IC :"); 
       String newIC = add.nextLine(); 
       System.out.print("Enter New Employee Phone Number :"); 
       String newPhoneNumber = add.nextLine(); 
       System.out.print("Enter New Employee Salary :"); 
       double newSalary = add.nextDouble(); 

       if(selection == 1){ 
        System.out.print("Enter New Employee Subject :"); 
        String newSubject = add.nextLine(); 
        add.nextLine(); 
        System.out.print("Enter New Employee School :"); 
        String newSchool = add.nextLine(); 
        aca[totalEmployee] = new academic(newID,newName,newIC,newPhoneNumber,newSalary,newSubject,newSchool); 
        System.out.print(aca[totalEmployee].toString()); 
        } 
       else{ 
        System.out.print("Enter New Employee Position :"); 
        String newPosition = add.nextLine(); 
        add.nextLine(); 
        System.out.print("Enter New Employee Department :"); 
        String newDepartment = add.nextLine(); 
        admin[totalEmployee] = new academic(newID,newName,newIC,newPhoneNumber,newSalary,newPosition,newDepartment); 
        System.out.print(admin[totalEmployee].toString()); 
        } 

       System.out.print("\nDo you want to add more ? (Y/N)"); 
       choice = add.next().charAt(0); 

     }while(choice == 'Y' || choice == 'y'); 
     MainMenu(aca, admin); 
     } 

     //Edit Employee 
     public static void Edit(employee[] aca,employee[] admin){ 
      Scanner input = new Scanner(System.in); 
      System.out.print("Enter the employee's ID"); 
      String id = input.nextLine(); 
      for(int i=0; i<totalEmployee; i++){ 
       if(aca[i].getId() == id){ 
        String AcaID = aca[i].getId(); 
        System.out.print("Enter employee's name: "); 
        String name = input.nextLine(); 
        System.out.print("Enter employee's IC number(eg.930302-14-5434): "); 
        String IC = input.nextLine(); 
        System.out.print("Enter employee's Phone Number: "); 
        String tel = input.nextLine(); 
        System.out.print("Enter the Salary: "); 
        double salary = input.nextDouble(); 
        System.out.print("Enter the Subject: "); 
        String subject = input.nextLine(); 
        System.out.print("Enter the School: "); 
        String school = input.nextLine(); 
        admin[i] = new academic(id,name,IC, tel, salary, subject, school); 
        } 
        else if(admin[i].getId() == id){ 
         String AdminID = admin[i].getId(); 
         System.out.print("Enter employee's name: "); 
         String name = input.nextLine(); 
         System.out.print("Enter employee's IC number(eg.92030-10-55588): "); 
         String IC = input.nextLine(); 
         System.out.print("Enter employee's Phone Number: "); 
         String tel = input.nextLine(); 
         System.out.print("Enter the Salary: "); 
         double salary = input.nextDouble(); 
         System.out.print("Enter employee's position: "); 
         String position = input.nextLine(); 
         System.out.print("Enter employee's department: "); 
         String department = input.nextLine(); 
         admin[i] = new academic(id,name,IC, tel, salary, position, department); 
        } 
        else { 
         System.out.print("\nThis ID does not exist. \n Please re-type."); 
         Edit(aca,admin); 
        } 
      } 
     } 

     //Delete Employee 
     public static void Delete(employee[] aca,employee[] admin){ 
      Scanner input = new Scanner(System.in); 
      System.out.print("Enter the employee's ID"); 
      String delete = input.nextLine(); 
      //int deleteEMP = Integer.parseInt(input); 
      for(int i=0; i<totalEmployee; i++){ 
       if(aca[i].getId() == delete){ 
        aca[i].setShowEmployee(false); 
       } 
       else if(admin[i].getId() == delete){ 
        admin[i].setShowEmployee(false); 
       } 
       else { 
       System.out.print("\nWrong input. \n Please re-type."); 
       Delete(aca,admin); 
       } 
      } 
     } 
} 
+3

這是太多的代碼。嘗試將其縮減爲顯示您的問題的[SSCCE](http://sscce.org/)。 – Keppil

回答

3

Employee有兩個構造函數:一個不接受參數,另一個接受4個字符串,一個double和一個布爾值。

academic的第19行中,您嘗試撥打super(這是employee)帶有4個字符串和一個雙精度但沒有布爾值。由於employee中沒有這樣的構造函數,所以會出現錯誤。

這段代碼不應該編譯。它確實表明你在編譯過程中做了一些奇怪的事情。嘗試從頭開始編譯所有內容,看看是否收到編譯錯誤。

1

我很驚訝這個編譯。

在管理構造

你叫

super(id, name, ic, tel, salary); 

但員工可是沒有這樣的構造。你錯過了需要的最後一個布爾值。

也:你應該在員工類初始化計數爲0,以避免空指針

0

後,我編譯它表明編譯成功但只要我嘗試運行它,它讓我看到這條消息:

java.lang.NoSuchMethodError: employee.<init>(... 

這意味着你需要重新編譯依賴於employee類的構造函數的類。當你這樣做時,你很可能會發現你的academic類不能編譯。

如果您是手動編譯(即沒有構建工具),在您進行更改時重新編譯所有是個好主意。否則,你會錯過發生的問題,因爲(例如)你刪除或改變了方法構造函數或字段的簽名。

而不是手動編譯,最好使用構建工具或IDE。我希望他們會盡快教你...


雖然我注意到了,但您的類名違反了基本的Java風格規則。所有類名都應以大寫字母開頭。更改類名稱,並重命名源文件以匹配。

0
  1. 嘗試刪除所有類文件並嘗試重新編譯您的java源代碼。
  2. 嘗試在編譯器下次編譯時使用清理過程
相關問題