2015-01-07 2 views
0

Когда элементы в моем хэш-карте печатаются [см. Код, начинающийся с for (Map.Entry<String, World> entry : WorldsByName.entrySet())......], добавляется только последний элемент, который я добавил. Остальные исчезают.Элементы не добавляются

..... 

     public interface World { 
      abstract void run(String s); 
     } 

     private void sample(String[] inserted) { 
      Map<String, World> WorldsByName = new HashMap<String, World>(); 
      WorldsByName.put(inserted[1], new World() { 
       public void run(String s) { 
        if (inserted[0].equals("house")) { 
         System.out.println(inserted[0] + " with name " + s + " has been created."); 

        } else { 
         System.out.println("What do you mean by " + inserted[0] + " ?"); 
        } 
       } 
      }); 

..... 
+0

Этот код должен давать ошибку компиляции ... 'если вставлено [0] .equals (" house "))' в реализации 'void run (String s)', вы не можете просто использовать 'insert [0]' Вот. 'вставленный' не является' final'. – Saif

+0

Что содержит вставленный массив, вы пытались его распечатать в своем примере? –

ответ

0

Ваш код ставит только одно значение на карте WorldsByName

WorldsByName.put(inserted[1], new World() ... 

Так что, когда вы пытаетесь выполнить цикл он будет выполнять только один ключ.

for (Map.Entry<String, World> entry : WorldsByName.entrySet()) { 

Edit:

Для вашего требования вы должны change the method structure или вам придется make WorldsByName as global variable. Цикл не требуется для вашего прецедента.

Для изменения структуры методы:

private void sample(String[] inserted, Map<String, World> WorldsByName) { 

Pass экземпляр WorldsByName от метода вызывающего абонента, не инициализировать (new), то в методе проб. Обязательно добавьте нулевые проверки и все в методе образца для вставленного и WorldsByName.

Для изготовления WorldsByName в качестве глобальной переменной:

Map<String, World> WorldsByName = new HashMap<String, World>(); 

private void sample(String[] inserted) { 
    // Map<String, World> WorldsByName = new HashMap<String, World>(); 
    WorldsByName.put(inserted[1], new World() {... 

Если вы собираетесь создать несколько экземпляров класса HashMapTest2 то не делают WorldsByName как статические иначе вы можете также сделать WorldsByName как статический

+0

Вы должны поместить все ключи на свою карту и соответствующее значение. –

+0

это правда ...это только вставка элемента в индекс 1 вашего массива String – Olu

+0

Это не вызовет никаких проблем, просто запомните мое последнее утверждение в ответе. И если вы найдете ответы на свой вопрос, вы можете принять его, нажав галочку. –

0

Тобой может попытаться вставить все предметы одновременно, но значение будет представлять собой подпись объекта.

static Map<String, World> WorldsByName = new HashMap<String, World>(); 

private void sample(final String[] inserted) { 

    for (int i = 0; i < inserted.length; i++) 
     WorldsByName.put(inserted[i], new World() { 
      public void run(String s) { 
       if (inserted[0].equals("house")) 
        System.out.println(inserted[0] + " with name " + s 
          + " has been created."); 
       else 
        System.out.println("What do you mean by " + inserted[0] 
          + " ?"); 
      } 
     }); 
    for (Map.Entry<String, World> entry : WorldsByName.entrySet()) 
     System.out.println(entry.getKey() + ":-->" + entry.getValue()); 

    //..your other code here.. 
    } 

и сделать этот параметр окончательным, но я не уверен, что именно вы пытаетесь достичь здесь, кроме этого будет вставить значение ключа в формате, как [email protected]

+0

Почему вы проверяете 'if (вставлено [0] .equals (" house "))' для каждого значения в HashMap, то есть почему только 0-я позиция? –

+0

@NamanGala, вы спрашиваете меня или его ...? – Olu

+0

Я спрашиваю @EagleOne, за комментарий, который он добавил в вашем ответе. –

0

Я полагаю, в соответствии с вашими предыдущими комментариями, что вы будете проходить только два paameters, один дом/изба/др. и второе - это имя. Поэтому вы используете вставленные [0] и вставленные [1]. Это нормально, пока вы только заботитесь о двух параметрах. Чтобы сохранить значения на карте, существует несколько способов: 1) Создайте HashMap как переменную экземпляра и используйте тот же объект для вызова метода sample. Для например:

class HashMaptest2{ 
     Map<String, World> worldsByname = new HashMap<String, World>(); 
     etc. 
    } 

В основной метод

psvm(){ 
HashMapTest2 test=new HashMaptest2(); 
test.sample(inserted1); 
test.sample(inserted2) 

2) Второй способ заключается в создании HashMap в главном классе и передать его попробовать метод, как отметил Naman.

Смежные вопросы