Класс сотрудника: не удается разрешить символ в EmployeeMain - PullRequest
0 голосов
/ 14 января 2020

Я должен написать класс Employee, а затем вызвать его в Main, чтобы запустить тестовые задания.

Я продолжаю получать «не удается разрешить символ» в методе empRate. Он существует в классе Employee20, но когда я вызываю класс и метод из EmployeeMain20, я получаю сообщение об ошибке «не удается разрешить символ».

Net поиск дал мне всевозможные сведения об ошибках IntelliJ, изменение пути к файлам и передача проектов, и все это просто смущает меня. IntelliJ был установлен только на этом компьютере, файлы не были переданы или получены из других источников, и создание чистой копии местоположения не решило проблему.

Это проблемный код c. Второй «empRate» в каждой строке - это то, где я получаю «не могу разрешить символ».

    Employee20 empRate = new empRate("John", "Smith", 10000, 10, 10);
    Employee20 empRate1 = new empRate("Sue", "Smith", 20000, 10, 10);

Вот полный код вызывающего класса EmployeeMain20:

public class EmployeeMain20 {

    //Year added to differentiate from [other] assignments

    public static void main(String[] args){

        Employee20 empRate = new empRate("John", "Smith", 10000, 10, 10);
        Employee20 empRate1 = new empRate("Sue", "Smith", 20000, 10, 10);

        double wage = empRate.getWage();

        System.out.println("Employee name: " + empRate1.firstName +  empRate1.lastName);
        System.out.println("Employee wage: " + "$" + wage);
        //emp.greet();

        System.out.println("===============================================");

        wage = empRate1.getWage(); //wage defined in Employee2020 class

        System.out.println("Employee name: " + empRate1.firstName +  empRate1.lastName);
        System.out.println("Employee wage: " + "$" + wage);
        //emp.greet();

    }
}

Вот код вызываемого класса Employee20:

public class Employee20 {

    //Year added to differentiate from [other] assignments

    String firstName, lastName;
    int baseSalary, overtime, rate;

    public double getWage(){
        double wage = baseSalary * (overtime * rate);
        return wage;
    }

    public void empRate(String fname, String lname, int base, int overTime, int unitrate){
        firstName = fname;
        lastName = lname;
        baseSalary = base;
        overtime = overTime;
        rate = unitrate;
    }


}

У меня похожая проблема в другом назначении. Я полагаю, что если я смогу выяснить, как решить один, я могу решить и то, и другое.

Ответы [ 5 ]

1 голос
/ 14 января 2020

С Предоставление конструкторов для ваших классов

Класс содержит конструкторы, которые вызываются для создания объектов из чертежа класса. Объявления конструктора выглядят как объявления методов - за исключением того, что они используют имя класса и не имеют возвращаемого типа. Например, у Bicycle есть один конструктор:

public class Bicycle{
  public Bicycle(int startCadence, int startSpeed, int startGear) {
    gear = startGear;
    cadence = startCadence;
    speed = startSpeed;
  }
}

Итак, ниже в недопустимом конструкторе:

 public void empRate(String fname, String lname, int base, int overTime, int unitrate)

измените его на:

public Employee20(String fname, String lname, int base, int overTime, int unitrate)

И создайте объект, используя это как:

Employee20 empRate = new Employee20("John", "Smith", 10000, 10, 10);
1 голос
/ 14 января 2020

Вы используете empRate в качестве конструктора, но это не так. Конструктор будет выглядеть как

public Employee20(String fname, String lname, int base, int overTime, int unitrate)

А класс будет выглядеть как

public class Employee20 {

    String firstName, lastName;
    int baseSalary, overtime, rate;

    public Employee20(String fname, String lname, int base, int overTime, int unitrate) {
        firstName = fname;
        lastName = lname;
        baseSalary = base;
        overtime = overTime;
        rate = unitrate;
    }

    public double getWage() {
        double wage = baseSalary * (overtime * rate);
        return wage;
    }
}

Создать новый Employee20

Employee20 empRate = new Employee20("John", "Smith", 10000, 10, 10);
1 голос
/ 14 января 2020

Конструктор класса должен совпадать с именем класса и не иметь возвращаемого типа

public Employee20 (String fname, String lname, int base, int overTime, int unitrate){
    firstName = fname;
    lastName = lname;
    baseSalary = base;
    overtime = overTime;
    rate = unitrate;
}

Когда вы вызываете его, вы можете сделать как

Employee20 empRate = new Employee20("John", "Smith", 10000, 10, 10);
0 голосов
/ 14 января 2020

Как все уже говорили, проблема в вашем конструкторе, ему нужно иметь то же имя, что и классу. Я хочу добавить, что вам не нужно вводить разные имена в качестве параметра, вы можете использовать это ":

public Employee20(String firstName, String lastName, int baseSalary, int overtime, int rate) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.baseSalary = baseSalary;
    this.overtime = overtime;
    this.rate = rate;
}

Вы даже можете сгенерировать конструктор из вашей IDE.

0 голосов
/ 14 января 2020

Этот код

Employee20 empRate1 = new empRate("Sue", "Smith", 20000, 10, 10);

не имеет смысла. То, что вы пытаетесь сделать: 1. Инициализировать объект Employee20 2. Вызвать метод экземпляра empRate для этого экземпляра

Измените код на один из следующих:

1 .

Employee20 one = new Employee20();
one.empRate("Sue", "Smith", 20000, 10, 10);

2.

new Employee20().empRate("Sue", "Smith", 20000, 10, 10);

empRate имеет void в качестве возвращаемого типа, поэтому он не будет возвращать значение, но, возможно, вы захотите использовать его позже , Это можно сделать, используя первый подход, а затем вызывая другие методы в том же экземпляре.

Или просто отбросьте метод и поместите инициализацию в своем конструкторе:

public Employee20(fname, lname, base, overTime, unitrate) {
  firstName = fname;
  lastName = lname;
  baseSalary = base;
  overtime = overTime;
  rate = unitrate;
}

через который вы можете позвонить:

Employee20 empRate = new Employee20("Sue", "Smith", 20000, 10, 10);
...