Java, мне нужна помощь в создании объекта - PullRequest
0 голосов
/ 30 марта 2011

Здравствуйте, я новичок в Java.Я пытаюсь создать объект и передать имя через него.Понятия не имею, что я делаю неправильно?

public class Employee
{
      private String name, number;
      private String date;


      public Employee()
      {
          name= "";
          number = "";
          date = "";
      }

      public Employee(String name, String number, String date)
      {
            setName(name);
            setNumber(number);
            setDate(date);
      }

      public void setName(String n)
      {
            name = n;
      }
      public void setNumber(String n)
      {
            number = n;
            // you can check the format here for correctness
      }
      public void setDate(String d)
      {
            date = d;
      }

      public String getName()
      {
            return name;
      }
      public String getNumber()
      {
            return number;
      }
      public String getDate()
      {
            return date;
      }
}





import java.util.Scanner;

public class TeamLeadDemo

{

    public static void main(String[] args)

    {



        String name;

        // create scanner object

        Scanner keyboard = new Scanner(System.in);

        // inputting data

        System.out.println("Enter Name:");

        name = keyboard.nextLine();



        // instantiating object, HERE IS THE PROBLEM

        Employee thename = new Employee(name);

        // outputting data

         System.out.println("Employee Name:"+thename.getName());

        System.out.println("Employee Details:\n" + thename);

    }

}// Function definition

Что мне делать ??

Ответы [ 6 ]

5 голосов
/ 30 марта 2011

Привет, новичок, программист!

Посмотрите, как вы инициализируете свой объект:

Employee thename = new Employee(name);

Поскольку вы задаете ему только строковое имя в качестве параметра, Java не может инициализировать вашего сотрудника.объект, потому что у него нет одного аргумента конструктора!

Вот ваши сигнатуры методов конструкторов:

public Employee()
public Employee(String name, String number, String date)

Один не принимает аргументов, а другой - 3 аргумента.

Если вы посмотрите, как вы его инициализируете, вы передадите только 1 аргумент!

Для того, чтобы ваш код работал, вам нужно создать новый конструктор, который имеет один аргумент.Или, что еще проще, вы можете просто ввести "", "" для своих числовых значений и значений строки даты.

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

1 голос
/ 30 марта 2011

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

  public Employee(String name) {
        this.name = name;
        this.number = "";
        this.date = "";
  }

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

1 голос
/ 30 марта 2011

Ваш класс Employee имеет два конструктора: один принимает нулевые аргументы, а другой - три аргумента.Тем не менее, вы пытаетесь построить это с одним аргументом.Это не скомпилируется.

Существует два возможных решения:

  1. Добавить еще один конструктор, принимающий один аргумент.

    public Employee(String name) {
        this.name = name;
    }
    
  2. Используйте конструктор с тремя аргументами и передайте null через.

    Employee employee = new Employee(name, null, null);
    

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

0 голосов
/ 30 марта 2011

Если у вас есть очень веские причины не использовать Employee thename = new Employee(name, "", "");, вы можете попробовать "varargs"

As: public class Employee {String fname = "";Строка lname = "";

public Emp(String... attrs) {
    if ( attrs.length > 1 ) {
        fname = attrs[0];
        lname = attrs[1];
    }else if(attrs.length == 1) {
        fname = attrs[0];
    }
}
public String toString() {
    return fname + " " + lname;
}
public static void main(String[] args){
    Employee e1 = new Employee ("Test");
    Employee e2 = new Employee ("Test" ,"case");

    System.out.println(e1);
    System.out.println(e2);
}

}

Внимание : это просто ответ на ваш вопрос - подумайте, прежде чем использовать в реальных ситуациях.Не с точки зрения дизайна / наилучшего подхода.Но это отличается и обслуживает ваш вопрос, хотя; -)

0 голосов
/ 30 марта 2011

Employee thename = new Employee(name);

У вас нет конструктора, который принимает только одну строку

0 голосов
/ 30 марта 2011

Вам нужно также передать number и date в конструктор.Попробуйте:

Employee thename = new Employee(name, "", "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...