2016-11-04 50 views
1

我想我理解錯誤信息的含義,即我有一個Person,並試圖將其轉換爲HashMap < String,Person>,但那不是什麼代碼說?我不明白我做錯了什麼。當我閱讀代碼時,我看不到任何問題.. 我一直在此停留一段時間..如果有一些基本的東西我錯過了我很想聽到它,因爲我只是沒有得到這個錯誤信息無法將人員轉換爲HashMap <String,Person>

//Variable HashMap 
public static HashMap<String, Person> personer = new HashMap<String, Person>(); 

//Method newPerson 
public HashMap<String, Person> newPerson(String name) { 
      Person person = new Person(name); 
      return personer.put(name, person); 
    } 

//Method to read file 
public void readFile(String filnavn) throws Exception { 
     String line; 
     String current; 

     File file = new File(filnavn); 
     Scanner in = new Scanner(new File(filnavn)); 
     while (in.hasNextLine()) { 
      line = in.nextLine(); 
      personer.put(newPerson(line)); 
     } 
    } 

在return personer.put(name,person);我得到錯誤說不兼容的類型:人不能轉換爲HashMap < String,Person>;

我還在personer.put(newPerson(line))處得到一個錯誤;說沒有找到合適的方法,但我認爲這兩個錯誤是相關的?

+3

您認爲「personer.put(name,person)」這個表達的類型是什麼?你確定'put'方法的結果是你想要返回的嗎? –

+0

不,第二個錯誤與第一個沒有任何關係 - 你試圖添加一個值而不是一個鍵和一個值。目前還不清楚爲什麼你要在這兩種方法中加入地圖... –

+1

可能不是HashMap 。所以方法應該是: public Person newPerson()而不是 public HashMap ()? –

回答

2

你在你的代碼中的一些邏輯問題時,personer.put(name, person)返回Person不是HashMap<String, Person>
在你readFile你打開一個文件兩次

File file = new File(filnavn); 
    Scanner in = new Scanner(new File(filnavn)); // new File(filnavn), you didn't use the file ! 

我想你想讀包含個人文件每行中的名稱。
這裏是你怎麼可以

//Method to read file 
public void readFile(String filnavn) throws Exception { 
    String line; 
    String current; // you didn't use this variable ! 

    File file = new File(filnavn); 
    Scanner in = new Scanner(file); 
    while (in.hasNextLine()) { 
     line = in.nextLine(); 
     personer.put(line,new Person(line)); // you don't need the newPerson(String name) method 
    } 
} 
1

的問題是在返回這裏:

public HashMap<String, Person> newPerson(String name) { 
    Person person = new Person(name); 
    return personer.put(name, person); 
} 

所以你需要要麼使這並不爲personer.put返回一個人,而不是一個地圖工作該方法返回一個人,或返回personer地圖

因此,將其更改爲這個返回地圖:

public HashMap<String, Person> newPerson(String name) { 
    Person person = new Person(name); 
    personer.put(name, person); 
    return personer; 
} 

這樣該方法返回方法定義所需的Map。

至於construtor您正在使用,而不是類construtor它返回一個Map創建的方法,該方法應該是:

new Person("name"); 

所以它必須是這樣的假設有一個construtor這需要Person類中的字符串:

public void readFile(String filnavn) throws Exception { 
    String line; 
    String current; 

    File file = new File(filnavn); 
    Scanner in = new Scanner(new File(filnavn)); 
    while (in.hasNextLine()) { 
     line = in.nextLine(); 
     personer.put(new Person(line)); 
    } 
} 
1

添加到地圖,然後返回地圖。相反,您要返回的地圖放置操作的結果本身不是地圖。

相關問題