2015-07-11 99 views
4

對於我的任務,我創建了一個名爲Agency的類,它將存儲有關人才機構的數據,並且我已創建必需的屬性。我也得到了一個數據文件,我需要閱讀。但首先,我要測試我的課程。我可以使用getter和setters來顯示我想要的輸出,但是現在我想創建對象Agency的新實例並添加細節,但是我收到一條錯誤消息,說沒有找到合適的構造函數。我將這些設置與我的構造函數進行了匹配,或者至少看不到我的錯誤在哪裏。任何幫助謝謝。Java找不到合適的構造函數

public class Agency { 

    //Attributes for class Agency 

    private String name; 
    private String[] address; 
    private String[] adminStaff; 
    private int phoneNumber; 
    private String type; 

    /** 
    *Constructor that creates object Agency 
    */ 
    public Agency() { 

    } 

    /** 
    * Constructor that creates object Agency with values 
    * @param name 
    * @param address 
    * @param adminStaff 
    * @param phoneNumber 
    * @param type 
    */ 
    public Agency(String name, String[] address, String[] adminStaff, int phoneNumber, String type) { 
     this.name = name; 
     this.address = address; 
     this.adminStaff = adminStaff; 
     this.phoneNumber = phoneNumber; 
     this.type = type; 
    } 

    /** 
    * 
    * @return 
    */ 
    public String getName() { 
     return name; 
    } 

    /** 
    * 
    * @param name 
    */ 
    public void setName(String name) { 
     this.name = name; 
    } 


    /** 
    * 
    * @return 
    */ 
    public String[] getAddress() { 
     return address; 
    } 

    /** 
    * 
    * @return 
    */ 
    public String[] getAdminStaff() { 
     return adminStaff; 
    } 

    /** 
    * 
    * @return 
    */ 
    public int getPhoneNumber() { 
     return phoneNumber; 
    } 

    /** 
    * 
    * @param phoneNumber 
    */ 
    public void setPhoneNumber(int phoneNumber) { 
     this.phoneNumber = phoneNumber; 
    } 

    /** 
    * 
    * @return 
    */ 
    public String getType() { 
     return type; 
    } 

    /** 
    * 
    * @param type 
    */ 
    public void setType(String type) { 
     this.type = type; 
    } 

    private String getArrayAsString(String[] a) { 
     String result = ""; 
     /*for(int i = 0; i<a.length; i++) 
     { 
      result += a[i] +" "; 
     }*/ 
     for(String s: a) 
     { 
      result += s + " "; 
     } 
     result = result.trim(); 
     return result; 
    } 

    private String[] getStringAsArray(String a) { 
     String[] result = a.split(":"); 
     return result; 
    } 

    public void setAddress(String Address) { 
     this.address = getStringAsArray(Address); 
    } 

    public void setAddress(String[] Address) { 
     this.address = Address; 
    } 

    public String getAddressAsString() { 
     return getArrayAsString(address); 
    } 

    public void setAdminStaff(String adminStaff) { 
     this.adminStaff = getStringAsArray(adminStaff); 
    } 

    public void setAdminStaff(String[] adminStaff) { 
     this.adminStaff = adminStaff; 
    } 

    public String getAdminStaffAsString() { 
     return getArrayAsString(adminStaff); 
    } 

    @Override 
    public String toString(){ 
      return name +"\t"+ getAddressAsString() +"\t"+ 
        getAdminStaffAsString() +"\t"+ phoneNumber +"\t"+ type + "\n"; 
    } 
} 

我的主要類

public class AgencyTest { 

public static void main(String[] args) {  
    /*a.setName("Potters Talent Agency"); 
    a.setAddress("126-182 Ashwood Road:Potters Bar:Hertfordshire EN6 2:UK"); 
    a.setAdminStaff("Megan Speagle:Daron Spilman"); 
    a.setPhoneNumber(2598052); 
    a.setType("All"); 
    System.out.println(a.getName()); 
    System.out.println(a.getAddressAsString()); 
    System.out.println(a.getAdminStaffAsString()); 
    System.out.println(a.getPhoneNumber()); 
    System.out.println(a.getType());*/ 
    Agency a = new Agency("Potters Talent Agency, 126-182 Ashwood Rd: Potters Bar: Hertfordshire EN6 2: UK, " 
      + "Megan Speegle:Daron Spilman:Leonel Striegel:Hubert Tesoro:Nathanial Pompey, 2598052, All"); 
    System.out.println(a); 
} 

} 註釋掉行工作,但如果我嘗試從「原子能機構=新局()」行做這一切將無法正常工作。

plz幫助我是一個新手,我可能使用不好的術語,所以不知道如果它是有道理的,我即將做的事情。

好吧,添加了一個新的構造函數,它將其作爲一個字符串,但獲取一個整數值的錯誤phonenumber。 下面的代碼:

`public Agency(String csvString) { 
     String[] attributes =csvString.split(","); 
     int i = 0; 
     for(String s : attributes) 
     { 
      switch(i) 
      { 
       case 0: 
        this.name = s; 
        break; 
       case 1: 
        this.address = getStringAsArray(s); 
        break; 
       case 2: 
        this.adminStaff = getStringAsArray(s); 
        break; 
       case 3: 
        this.phoneNumber = getIntAsString(s); 
        break; 
       case 4: 
        this.type = s; 
        break; 
      } 

我試圖將其轉換爲字符串,但似乎並沒有工作。 更多的代碼:

private String getIntAsString(int a){ 
    String result = Integer.toString(a); 
    return result; 
} 

public String getPhoneNumberAsString() { 
    return getIntAsString(phoneNumber); 
} 
public void setPhoneNumber(int phoneNumber){ 
    this.phoneNumber = phoneNumber; 
} 
     i++; 
    }` 

回答

10
Agency a = new Agency("Potters Talent Agency ... EN6 2: UK, " 
     + "Megan Speegle:Daron ... 2598052, All"); 

試圖調用一個串構造和沒有這樣的構造存在。

您需要提供這樣的構造函數(將字符串拆分爲其組件字段),或者自己拆分字符串並使用這些組件字段調用當前構造函數。

+0

謝謝。我用過Integer.toString(i)。但仍然有錯誤。 – omzy

1

看到錯誤是

Agency a = new Agency("Potters Talent Agency, 126-182 Ashwood Rd: Potters Bar: Hertfordshire EN6 2: UK, " 
      + "Megan Speegle:Daron Spilman:Leonel Striegel:Hubert Tesoro:Nathanial Pompey, 2598052, All"); 

你只是傳遞一個字符串來構造並且在你的類沒有構造它接受的唯一的字符串作爲參數。 因此正確地形成你的參數。

嘗試創建對象這樣

String myAddress[] = "BLR India".split(" "); 
    String myAdmin[] = "my admin array".split(" "); 
    Agency a = new Agency("MyName", myAddress, myAdmin, 1235678, "myType"); 
4

在行

Agency a = new Agency("Potters [...] All"); 

你基本上調用構造函數,需要一個字符串作爲它的參數。所以編譯器正在尋找這樣的構造函數:

Agency(String properties) { ... } 

這個構造函數不存在。相反,你有一個構造函數

Agency(String name, String[] address, String[] adminStaff, int phoneNumber, String type) { ... } 

它將參數分開。所以,你必須調用它像這樣:

Agency a = new Agency(
     "Potters Talent Agency", 
     new String[] {"126-182 Ashwood Rd", "Potters Bar", "Hertfordshire EN6 2", "UK"}, 
     new String[] {"Megan Speegle", "Daron Spilman", "Leonel Striegel", "Hubert Tesoro", "Nathanial Pompey"}, 
     2598052, 
     "All" 
); 

你可以 - 或者 - 提供一個構造函數取一個字符串,然後做一些字符串魔法拆卸部件。這有點複雜且容易出錯,所以我建議不要這麼做。

0

您正在使用錯誤的構造函數。你現在擁有的是

Agency a = new Agency("Potters Talent Agency, 126-182 Ashwood Rd: Potters Bar: Hertfordshire EN6 2: UK, " 
      + "Megan Speegle:Daron Spilman:Leonel Striegel:Hubert Tesoro:Nathanial Pompey, 2598052, All"); 

所以它會期望一個只有單個字符串參數,你沒有的構造函數。

你應該做的好,我創建了一個構造函數,把它作爲一個字符串,但似乎無法得到它取整數值,像

List<String> addr = new ArrayList<String>(); 
    addr.add("126-182 Ashwood Rd"); 
    addr.add("Potters bar"); 
    addr.add("Hertfordshire EN6 2"); 
    addr.add("UK"); 
    List<String> adminStaff = new ArrayList<String>(); 
    adminStaff.add("Megan Speegle"); 
    adminStaff.add("Daron Spilman"); 
    agency a = new Agency("Potters Talent Agency", addr.toArray(), adminStaff.toArray(),2598052, "All"); 
相關問題