2016-07-08 4 views
0

これにはいくつか問題があります。私はマップにメンバー変数を追加したいと思います。ここでクラスのメンバー変数をマップに追加する

が私のコードです:

Sprinter.java

public class Sprinter { 
    private int age; 
    private String name; 
    private String address; 

public Sprinter() { 
} 

public Sprinter(int age, String name, String address) { 
    this.age = age; 
    this.name = name; 
    this.address = address; 
} 

public void setAge(int age) { 
    return this.age = age; 
} 

public int getAge() { 
    return this.age; 
} 

public void setName(String name) { 
    return this.age = age; 
} 

public String getName() { 
    return this.name; 
} 

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

public String getAddress() { 
    return this.address; 
} 

Worker.java

Sprinter _s = new Sprinter(); 
_s.setAge(16); 

_s.setName("Chris"); 

_s.setAddress("123 Street"); 

Map.java

public class Maper { 
    private Sprinter _sp = new Sprinter(); 
    private static Map<String, Sprinter> map = new HashMap<String, Sprinter>(); 
public void printMap() { 
    map.put(_sp.getName(), _sp); 
    System.out.println(map); 

私は、マップ内の文字列をしたいですキーとなる値、および値Sprinterクラスの年齢、住所、名前フィールドになります。私のWorker.javaクラスでは、私は次のものを使用します:

Maper _m = new Maper(); 
_m.printMap(); 

出力は{"Chris"、 "Chris"}です。 しかし、私はすべての変数を追加したい。何かアドバイス?

+0

は、完全な 'Maper'クラスを表示、または少なくとも' printMap'method – Mubin

+0

あなたは私の出力」とはどういう意味ですか"?私はあなたの 'printMap'メソッドはマップに追加して入力するだけです。それは何も印刷しません。 –

+0

編集してprintステートメントを追加します。 –

答えて

1

マップは単一のキーと単一の値を関連付けます。マップは3つの異なる値(16、 "Chris"、 "123 Street")を持つ単一のキー( "Chris")を明示的に関連付けることはできません。

  1. 使用する3つの異なるキー( - >16"Chris_name" - >"Chris""Chris_address" - >"123 Street"例えば"Chris_age"):次の2つの明白な選択肢があります。値が異なる型(int vs String)であるため、このオプションはさらに複雑になります。そのため、マップをMap<String, Object>として宣言する必要があります。通常はそれほど大きくありません。

    map.put(_sp.getName() + "_name", _sp.getName()); 
    map.put(_sp.getName() + "_age", _sp.getAge()); 
    map.put(_sp.getName() + "_address", _sp.getAddress()); 
    
  2. より良いオプションは、三つの値を保持するためのコンテナオブジェクトを使用して、マップにそれを格納することです:挿入コードは次のようになります。それはあなたがすでに持っているコードです。あなたがしたい場合はその場合は、あなたのような何かをする必要があり年齢:

    map.get("Chris").getAge(); 
    
+0

ありがとう、なのでmap.get(_sp.getName()。getAge()); –

+0

@Arrayoob私はあなたが 'map.get(_sp.getName())。getAge();'を意味すると思います。 – shmosel

+0

それは確かにうまくいくでしょうが、なぜあなたがそれをするのか疑問に思っています。あなたは既にSprinterオブジェクトである '_sp'を持っています。その場合、' _sp.getAge() 'を直接呼び出すことができます。すべて。あなたのスプリンターを保つための場所としてマップを考えてみましょう。あなたが必要なものを手に入れて、必要なものを手に入れてください。必要なスプリンターをすでにお持ちの場合は、すべて設定されています!地図はあなたが望むスプリンターの名前を知っているにもかかわらず実際には参照されていません。 – adamreeve

関連する問題