2010-10-04 4 views
0

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

 
Error 
EmployeeTest.java:13: cannot find symbol 
symbol : constructor Employee() 
location: class Employee 
    Employee x = new Employee(); 
       ^
EmployeeTest.java:14: cannot find symbol 
symbol : constructor Employee() 
location: class Employee 
    Employee y = new Employee(); 
public class Employee 
{ 
private double salaryValue; // variable that stores monthlySalary 
private String firstName; // instance variable that stores first name 
private String lastName; // variable that stores last name 

public Employee(String firstNameParameter , String lastNameParameter , double   salaryValueParameter) 
{ 

    if (salaryValueParameter < 0.0) // validate monthlySalary > 0.0 
    salaryValue = 0.0; // if not salary is intitalized to default 

    else 

     firstName = firstNameParameter; 
     lastName = lastNameParameter; 
     salaryValue = salaryValueParameter; 
} 

public class EmployeeTest 
{ 
public static void main(String[] args) 
{ 
String temp; 
Double temp2; 
Double temp3; 

Employee x = new Employee(); 
Employee y = new Employee(); 
+1

Кстати, 'double' часто * не * лучший тип данных для моделирования валютных количеств из-за ошибок округления, которые могут накапливаться с течением времени. –

ответ

3

Вы называете конструктор без параметров:

new Employee() 

Это заставляет Java искать конструктор по умолчанию в этом классе:

public Employee() {} 

Что это может 't найти, потому что у вас есть пользовательский конструктор с параметрами, следовательно, ошибка. Ваш Employee класс имеет только этот конструктор:

public Employee(String, String, double) {} 

Вы должны либо передать параметры конструкторов в ваших new заявлениях, или объявить, что параметр-менее по умолчанию конструктор явно и реализовать его (как перегрузки вашего другого конструктора, возможно, передавать значения по умолчанию или что-то еще).

0

Вы должны добавить открытый конструктор по умолчанию:

public void Employee(); 
10

Поскольку вы добавили конструктор, который принимает 3 аргумента, Employee класс больше не имеет конструктор по умолчанию - тот, который не принимает никаких аргументов. Таким образом, вы не можете сделать это:

Employee x = new Employee(); 

и вы должны включать в себя 3-х аргументов:

Employee x = new Employee("firstname", "lastname", 123.45); 

Если вы хотите создать экземпляр Employee без подачи каких-либо параметров, необходимо добавить конструктор без аргументов:

public Employee() { 
} 

Вы можете прочитать больше о конструкторах по умолчанию в section 8.8.9 в Java Language Specification.

0

Вы должны определить свой конструктор по умолчанию. При реализации заказного один, по умолчанию теряется

public class Employee{ 
    public Employee(){} 
... 
} 

Here является короткая статья о конструкторах

0

Ваш конструктор определяет Струнный firstNameParameter Строковый lastNameParameter, двойной salaryValueParameter

в качестве параметров. Когда вы звоните Сотрудник x = новый сотрудник(); вы вызываете несуществующий конструктор. Вместо этого попробуйте вместо этого:

Employee x = new Employee('David', 'Jones', 50000); 
2

По умолчанию класс имеет конструктор no-arg. То есть

public Employee() 

Если вы позже идите, добавьте свой собственный конструктор .. т. Е.

public Employee(String name) 

Тогда перечисленные являются единственными, которые вы можете использовать.

Если вы все еще хотите, чтобы позвонить по умолчанию один, добавьте его обратно.

public Employee() 
0

Вы пытаетесь создать новый класс с пустым конструктором, но только конструктор вы объявили является одним требующих параметров , Вы, вероятно, следует попробовать что-то вроде:

Employee x = new Employee("Bob", "Jones", "100.0"); 

Или объявить конструктор по умолчанию:

public Employee() { 
    //do cool stuff here 
} 

Надежда, что помогает.

0

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

Так у вас есть два варианта:

  • Include другой конструктор без аргументов
  • вызова конструктора с правильным количеством и типами аргументов
Смежные вопросы