2016-11-04 2 views
1

エラーメッセージの意味、Personを持っていること、HashMapに変換しようとしていると思います。< String、Person>コードは言う?私は間違っていることを理解していない。私がコードを読んだとき、私は何の問題も見ません。 私はしばらくの間これに固執していました..私はそれを聞くのが大好きな何か基本的なものがあれば、私はちょうどこのエラーメッセージが表示されます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)); 
     } 
    } 

返信personer.put(name、person);私は、互換性のない型のエラーを受け取ります:PersonはHashMapに変換できません< String、Person>;

personer.put(newPerson(line))でもエラーが発生します。適切な方法が見つからないと言っていますが、2つのエラーが関連していると思いますか?

+3

「personer.put(name、person)」という表現のタイプはどう思いますか?そして、あなたが 'put'メソッドの結果を返そうとしていると確信していますか? –

+0

いいえ、2番目のエラーは最初のものとは関係がありません。キーと値の代わりに値を追加しようとしています。どちらの方法でも地図に追加する理由は明らかではありません。 –

+1

おそらくHashMap ではありません。したがって、メソッドは次のようにする必要があります。 public Person newPerson()ではなく public HashMap ()? –

答えて

2

あなたはpersoner.put(name, person)私はあなたが人々を含むファイルを読みたいと思うあなたのreadFileあなたがファイルを開いた2回

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

PersonないHashMap<String, Person>
を返す、あなたのコードでは、いくつかの論理的な問題を抱えています各行の名前。ここ
だどのようにできた

問題がここリターンである
//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として動作しません。この方法は、人を返す、またはSO personerマップ

を返し、マップを戻すには、このように変更します。

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

この方法では、メソッド定義に必要なMapが返されます。

new Person("name"); 

だから、それが取るコンストラクタがありますと仮定すると、次のようでなければならない:あなたの代わりにする必要がありますクラスのコンストラクタのマップを返します。あなたが作成したメソッドを使用しているコンストラクタについては

PersonクラスのString:

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

マップに追加して、マップを返します。代わりに、マップ自体ではないmap put操作の結果を返します。

関連する問題