2011-03-30 40 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-思考。不是從設計/最佳方法的角度來看。但它是不同的,並迎合你的問題雖然;-)