0

私はJavaの初心者で、プログラムを実行しようとすると混乱しました...コンパイル後、コンパイルが成功したことを示しますが、実行しようとするとすぐに、このメッセージが表示されます。

    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);
              }
            }
        }
}
4

4 に答える 4

3

Employee1 つは引数をとらず、もう 1 つは double と boolean の 4 つの文字列を取ります。

19 行目では、4 つの文字列と double を使用して boolean を使用せずに(これは)academicを呼び出そうとしています。そのようなコンストラクターがないため、エラーが発生します。superemployeeemployee

このコードはコンパイルすべきではありません。それが行われたという事実は、コンパイルプロセスで何か奇妙なことをしていることを示唆しています。すべてを最初からコンパイルしてみて、コンパイル エラーが発生するかどうかを確認してください。

于 2012-11-28T13:28:34.377 に答える
1

これがコンパイルされることに驚いています。

あなたが呼び出す管理コンストラクターで

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

しかし、従業員にはそのようなコンストラクターがありません。ブール値である必要な最後の引数がありません。

また、NullPointerを避けるために、従業員クラスのカウントを0として初期化する必要があります

于 2012-11-28T13:30:24.130 に答える
0

コンパイルすると、コンパイルが成功したことが示されますが、実行しようとするとすぐに、次のメッセージが表示されます。

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

employeeこれは、クラス コンストラクターに依存するクラスを再コンパイルする必要があることを意味します。academicこれを行うと、ほとんどの場合、クラスがコンパイルされないことに気付くでしょう。

手でコンパイルする場合 (つまり、ビルド ツールを使用しない場合) は、変更を加えるたびにすべてのクラスを再コンパイルすることをお勧めします。そうしないと、(たとえば) メソッド コンストラクターまたはフィールドのシグネチャを削除または変更したために発生する問題を見逃すことになります。

手でコンパイルするよりも、ビルド ツールまたは IDE を使用することをお勧めします。私は彼らがすぐにそれについて教えてくれることを期待しています...


また、注意を喚起している間に、クラス名が基本的な Java スタイル ルールに違反しています。すべてのクラス名は大文字で始める必要があります。クラス名を変更し、ソース ファイルの名前を一致するように変更します。

于 2012-11-28T13:31:03.670 に答える
0
  1. すべてのクラス ファイルを削除し、Java ソースを再コンパイルしてみてください。
  2. 次回コンパイルするときは、コンパイラでクリーン プロセスを使用するようにしてください。
于 2012-11-28T13:34:36.930 に答える