【问题标题】:Employee Class: cannot resolve symbol in EmployeeMain员工类:无法解析 EmployeeMain 中的符号
【发布时间】:2020-04-30 20:52:52
【问题描述】:

我必须编写一个 Employee Class,然后在 Main 中调用它来运行测试项目。

我在方法 empRate 上不断收到“无法解析符号”。它存在于 Employee20 类中,但是当我从 EmployeeMain20 调用该类和方法时,出现“无法解析符号”错误。

网络搜索给了我各种关于 IntelliJ 错误、更改文件路径和传输项目的信息,所有这些都让我感到困惑。 IntelliJ 仅安装在这台计算机上,没有从其他来源传输或访问任何文件,创建一个干净的副本并没有解决问题。

这是有问题的代码。每行中的第二个“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;
    }


}

我在另一项任务中遇到了类似的问题。我想如果我能找出如何解决一个,我可以解决两个。

【问题讨论】:

    标签: java class methods calling-convention cannot-find-symbol


    【解决方案1】:

    类的构造函数需要和类名相同,并且没有返回类型

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

    【讨论】:

      【解决方案2】:

      您正在使用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);
      

      【讨论】:

        【解决方案3】:

        这段代码

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

        【讨论】:

          【解决方案4】:

          来自Providing Constructors for Your Classes

          类包含被调用以从类蓝图创建对象的构造函数。构造函数声明看起来像方法声明——除了它们使用类的名称并且没有返回类型。例如,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);
          

          【讨论】:

            【解决方案5】:

            正如大家已经说过的,问题在于你的构造函数,他需要与类同名。我要补充的是你不需要将不同的名称作为参数,你可以使用“this ":

            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 生成构造函数。

            【讨论】:

            • 感谢所有帮助过我的人!
            • 我在另一个让我抓狂的任务上使用了这个解决方案,它也在那里工作。再次感谢所有回答的人。
            • 我很高兴我(和每个人)可以帮助你:)
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-11
            • 1970-01-01
            • 1970-01-01
            • 2017-01-12
            • 2017-03-05
            • 1970-01-01
            相关资源
            最近更新 更多