2011-03-30 39 views
0

你好我是Java新手。我试图创建一个对象并通过它传递名称。我不知道我做错了什么?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 

我该怎么办?

+0

'Employee thename = new Employee(name,“”,“”);'。考虑“Employee”类的用例以具有必要的构造函数并正确使用它们。 – khachik 2011-03-30 16:28:20

回答

0

您需要将numberdate也传递给构造函数。尝试:

Employee thename = new Employee(name, "", ""); 
+0

好的,可以运行 – user659658 2011-03-30 16:31:34

1

Employee类有两个构造函数:一个以零个的参数和一个取三个参数。但是你试图用一个参数来构造它。那不会编译。

有两种可能的解决方案:

  1. 添加另一个构造带一个参数。

    public Employee(String name) { 
        this.name = name; 
    } 
    
  2. 使用构造采取三个参数,并通过null通过。

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

无关的具体问题,设置值清空默认的构造函数的字符串,并呼吁在第二构造的制定者是不是一个很好的做法。在第一种情况下,什么都不做,保持默认null。在第二个构造函数中,您应该更喜欢直接设置属性,而不是调用setter。

+0

解决方案一的效果更好。 – user659658 2011-03-30 16:33:54

0

Employee thename = new Employee(name);

你没有构造函数只有一个字符串

1

你需要一个只接收要传递的名字构造:

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

目前,你只能有一个默认的构造函数和一个接收所有三个属性的人。

5

嘿同胞新手程序员!

看看你如何初始化对象:

Employee thename = new Employee(name); 

既然你只给它的字符串名称作为参数,爪哇无法初始化Employee对象,因为它没有一个参数的构造函数!

这里是你的构造方法的签名:

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

一个不带任何参数,以及其他3个参数。

如果你看看你初始化它的方式,你只能传递1个参数!

您需要创建一个新的构造函数,该构造函数具有单个参数才能使您的代码正常工作。或者更容易,你可以通过“”,“”输入数字和日期字符串值。

更有经验的程序员请不要犹豫,以纠正我的编程语义,如果他们错了。我觉得我在用我不完全理解的词。

+0

解释对我来说似乎很好:-)。 – helpermethod 2011-03-30 17:06:27

0

如果你有一些很好很强大的理由不使用Employee thename = new Employee(name, "", "");,您可以尝试“可变参数”

由于: 公共类Employee { 字符串FNAME =“”; String 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); 
} 

}

注意:这只是回答你使用现实世界之前question-思考。不是从设计/最佳方法的角度来看。但它是不同的,并迎合你的问题虽然;-)