2017-01-14 8 views
0
public class Test { 
     public static void main(String[] args) { 
     HashMap<String, City> cities = new HashMap<>(); 
     cities.put("Rome", new City("Rome", "Italy", 2869461)); 
     cities.put("Berlin", new City("Berlin", "Germany", 3610156)); 
     cities.put("Lisbon", new City("Lisbon", "Portugal", 545245)); 
     Iterator<String> keySetIterator = cities.keySet().iterator(); 
     System.out.println("HashMap has " + cities.size() + " elements"); 
     System.out.print("Enter a city to search for "); 
     Scanner s = new Scanner(System.in); 
     String searchtext = s.nextLine(); 
     System.out.println(searchtext); 
     System.out.println("Key result " + cities.containsKey(searchtext)); 

     String key = keySetIterator.next(); 
      System.out.println("key: " + key + " value: " + cities.get(key).getName()); 
      if (cities.get(key).getName().contains(searchtext)) { 
         System.out.println("Value result found " + cities.get(key).getCountry() + " " + cities.get(key).getPopulation()); 
      } 

У меня есть этот код в основном, и у меня есть один класс (Город), который имеет только геттер, сеттеры и конструктор. Когда я запускаю код, он работает только тогда, когда полныйСравнение входной строки с несколькими ключами в Hashmap

SearchText = Рим

... Если я ставлю

Лиссабон

код Безразлично» t вставить в последнее «если», и я не знаю, почему. Любая помощь?

+1

Вы только по сравнению с самой первой записи. – Marvin

+0

'keySetIterator.next()' просто возвращает одну запись из итератора, и вы сравниваете ввод с ней, что вызывает проблему. Вместо этого вы можете просто искать входные данные против клавиш на карте. – Prathap

ответ

0

Asimac,

Похоже, вы только получаете первый ключ с

String key = keySetIterator.next(); 

Я думаю, что вы хотите, чтобы проверить все записи, а не только первый.

Рассмотрим что-то вроде этого:

while(keySetIterator.hasNext()){ 
     String key = keySetIterator.next(); 
     System.out.println("key: " + key + " value: " + cities.get(key).getName()); 
     if (cities.get(key).getName().contains(searchtext)) { 
        System.out.println("Value result found " + cities.get(key).getCountry() + " " + cities.get(key).getPopulation()); 
     } 
} 
+0

Примечание к OP: недостаток в вашем дизайне заключается в том, что более одного значения на карте могут иметь поисковый термин в качестве подстроки его имени. Рассмотрим карту, в которой есть города «Нью-Йорк», «Новый Лондон», «Нью-Брансуик» и «Новый Орлеан», с поисковым термином «Новый». Что должен вернуть алгоритм итератора? –