Конструкторы отказываются быть использованными

В настоящее время с помощью jgrasp пишется небольшая программа, использующая два разных файла в одном каталоге. В одном файле у меня есть открытый класс с несколькими открытыми конструкторами под названием Employee. В другом файле у меня есть класс, предназначенный для реализации класса Employee. Я не могу собрать эту программу - компилятор говорит мне, что таких предоставленных конструкторов не существует (см. Код ниже). Таким образом каждая сборка, которую я делаю, терпит неудачу.

Конструкторы внутри моего класса Employee имеют открытый доступ и, насколько я могу судить, названы правильно. Я парень из C#, поэтому я не знаю, вижу ли я проблему из-за своего нрава или из-за чего. Я склоняюсь на Java для класса в настоящее время в школе.

Вот мой класс Employee:

public class Employee
{
   // description: class representation of an employee. 

   // variable declarations
   String name = "", department = "", position = "";
   int idNumber = 0;

   // constructors
   public Employee(String n, String d, String p, int id)
   {
      // full constructor
      this.name = n; 
      this.department = d; 
      this.position = p; 

      if (id > -1) this.idNumber = id; 
      else this.idNumber = 0; 
   }
   public Employee(String n, int id)
   {
      // partial constructor (name and id)
      this.name = n; 

      if (id > -1) this.idNumber = id; 
      else idNumber = 0; 

      this.department = ""; 
      this.position = ""; 
   }
   public Employee()
   {
      // default constructor
      this.name = ""; 
      this.department = ""; 
      this.position = ""; 
      this.idNumber = 1;
   }

   // accessors
   public String getName() { return name; }
   public String getDepartment() { return department; }
   public String getPosition() { return position; }
   public int getID() { return idNumber; }

   // mutators
   public void setName(String newName) { name = newName; }
   public void setDepartment(String newDepartment) { department = newDepartment; }
   public void setPosition(String newPosition) { position = newPosition; }
   public void setID(int newID) { idNumber = newID; }
}

Вот мой класс реализации:

public class ChallengeImplementor
{
   public static void main(String[] args)
   {
      // create instance-variables for constructors
      String e1_name = "Susan Meyers", e2_name = "Mark Jones"; 
      string e1_department = "Accounting"; 
      string e1_position = "Vice President"; 
      int e1_ID = 47899, ew_ID = 39119; 

      // create several employee objects to prove they work. 
      Employee e1 = new Employee("Susan Meyers", "Accounting", "Vice President", 47899),  // created one with full constructor
               e2 = new Employee("Mark Jones", 39119),                                    // ... partial constructor
               e3 = new Employee();                                                       // ... default constructor

      // set values for e2 that weren't covered in partial constructor
      e2.setDepartment("IT"); 
      e2.setPosition("Programmer"); 

      // set values for e3
      e3.setName("Joy Rogers"); 
      e3.setDepartment("Manufacturing"); 
      e3.setPosition("Engineer"); 
      e3.setID(81774); 

      // display all three employees
      System.out.println("Name\t\tID\t\tDepartment\t\tPosition"); 
      System.out.println("----------------------------------------------------------------------");
      System.out.println(e1.getName() + "\t" + e1.getID() + "\t\t" + e1.getDepartment() + "\t\t" + e1.getPosition()); 
      System.out.println(e2.getName() + "\t" + e2.getID() + "\t\t" + e3.getDepartment() + "\t\t" + e2.getPosition()); 
      System.out.println(e3.getName() + "\t" + e3.getID() + "\t\t" + e3.getDepartment() + "\t\t" + e3.getPosition()); 
   }
}

5 ответов

Взгляните на это:e1_department а также e1_position должны быть объектами String, но в Java нет строки (запишите имя в нижнем регистре)

исправить опечатку, выполнив:

String e1_department = "Accounting";
String e1_position = "Vice President";

после этого код работает как положено:

выход:

Возможно, ваше заявление на импорт отсутствует. Добавьте его в начало вашего класса чуть ниже имени пакета.

import {full package name}.Employee;

Я взял код, запустил вашу основную функцию и получил ответ:

    Name        ID      Department      Position
    ----------------------------------------------------------------------
    Susan Meyers    47899       Accounting      Vice President
    Mark Jones  39119       Manufacturing       Programmer
    Joy Rogers  81774       Manufacturing       Engineer

Здесь выглядит хорошо. Можете ли вы проверить, правильно ли вы импортировали пакет?

Во-вторых, я вижу две ошибки во втором и третьем полях вашей основной функции: поля объявлены как строки с маленьким s, должно быть String.

Ну, я полный идиот. Каким-то образом файл Employee.java был перемещен из того же каталога. Я думаю, что jGrasp случайно сохранил его где-то еще, хотя именно там оба файла изначально были запущены.

Я исправил проблему с String - это был всего лишь тест, который я пытался выполнить, и этот код никогда не был нужен.

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

  string e1_department = "Accounting"; 
  string e1_position = "Vice President"; 

Как только я изменил это на String, он скомпилировался и работал просто отлично: скриншот. Щелкните правой кнопкой мыши ChallengeImplementor.class и запустите его как приложение Java.

Надеюсь это поможет

Другие вопросы по тегам