Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ассоциативный массив, вытащить значение из ячейки 
:(
    Опции темы
PSImozg
Дата 18.1.2014, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 29.12.2013

Репутация: нет
Всего: нет



Задание: Есть текст, нужно найти слова которые повторяются и сколько раз. Реализовать нужно массивом Map.

Код

         private static void perebor2(){ 
         String n[] = a.replaceAll("[^a-zA-Z ]", "").split(" ");//Оставляем только слова
          Set <String> set = new HashSet <String> (Arrays.asList(n));/*записываем массив1 в ХЭШ, чтобы
         убрать дубликаты(считал количество индивидуальных слов)*/
        String[] r = set.toArray(new String[set.size()]); 
        Map<String, Text> map = new Hashtable<String, Text>();
         
        for (int i=0; i<n.length; i++){
      
          boolean ob1=map.containsKey(n[i]);//Проверяю наличие слова в массиве
          if (ob1==false)//Если нет добавляю слово и счетчик 1 по ключу=слову
          {Text st = new Text(1, n[i]);
          map.put(n[i], st);
          //ch=st.getnumber();
                            }
          else//Если есть то должен просто увеличить счетчик на +1
          { Integer get = map.getnumber(n[i]);/*Вот тут у меня ошибка, как взять только цифру по ключу из массива?*/
           get++;
                Text st1 = new Text(get, n[i]);
                      map.put(n[i], st1);
          }
          System.out.println(map.get(n[i]));//работает
          }
        }


В целом программа работает, не могу реализовать только правильное увеличение счетчика, потому что не могу вытащить значение number по ключу. Получается так сделать, если сделать массив map одномерным и реализовать следующий код.
Код

           Integer get = map.get(n[i]);
           get++;
           map.put(n[i], get);

Но тогда у меня проблема с выводом в виде: слово-счетчик.

И еще один вопрос. Можно ли как то отсортировать map если в нем только 1 значение int, если можно то как?
Arrays.sort(???);
Помогите пожалуйста. Заранее спасибо.

Это сообщение отредактировал(а) PSImozg - 18.1.2014, 11:51
PM MAIL   Вверх
PSImozg
Дата 18.1.2014, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 29.12.2013

Репутация: нет
Всего: нет



В общем реализовал вот так.
Код

private static void perebor2(){ 
         String n[] = a.replaceAll("[^a-zA-Z ]", "").split(" ");
          Set <String> set = new HashSet <String> (Arrays.asList(n));
        String[] r = set.toArray(new String[set.size()]); 
        Map<String, Integer> map = new Hashtable<String, Integer>();   
       
 for (int i=0; i<n.length; i++){
    
          boolean ob1=map.containsKey(n[i]);
          if (ob1==false)
          {
          map.put(n[i], 1);
                            }
          else
          { Integer get = map.get(n[i]);
           get++;
                      map.put(n[i], get);

          }}
     Set <String> key=map.keySet();
        Iterator <String> it=key.iterator();
        for ( String el : key){
            Arrays.sort();//Вот тут проблема, не пойму, что написать, что бы отсортировал по количеству повторов?!
         System.out.println( it.next()+" = "+map.get(el));
        }}


Помогите сделать сортировку пожалуйста.
PM MAIL   Вверх
Samotnik
Дата 18.1.2014, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



PSImozg,  smile 
Цитата(PSImozg @  18.1.2014,  11:36 Найти цитируемый пост)
Есть текст, нужно найти слова которые повторяются и сколько раз. Реализовать нужно массивом Map.

Код

import java.util.HashMap;
import java.util.Map;

public class New {
    private static final String text = "mama mila ramu a rama mila papu";

    public static void main(String... args) {
        String[] arr = text.split(" ");
        Map<String, Integer> wordsMAp = new HashMap<>();
        for (String str : arr) {
            if (wordsMAp.containsKey(str)) {
                Integer amount = wordsMAp.get(str);
                wordsMAp.put(str, ++amount);
            } else {
                wordsMAp.put(str, 1);
            }
        }
        //print it
        for (Map.Entry<String, Integer> entry : wordsMAp.entrySet()) {
            System.out.println("The word: " + entry.getKey() + " was occurred " + entry.getValue() + " times");
        }
    }

}


PM MAIL   Вверх
PSImozg
Дата 19.1.2014, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 29.12.2013

Репутация: нет
Всего: нет



Благодарю за помощь. А не подскажите как еще отсортировать его, что бы например вывести 3 самых часто повторяющихся слова?
PM MAIL   Вверх
Pawl
Дата 19.1.2014, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Цитата(PSImozg @  19.1.2014,  09:20 Найти цитируемый пост)
 А не подскажите как еще отсортировать его, что бы например вывести 3 самых часто повторяющихся слова?

Сортировка по убыванию значений карты:
Код

import java.util.*;

public class SortMapValues {
    private static final String text = "mama mila rama a rama mila papu mila a a a";

    public static void main(String... args) {
        String[] arr = text.split(" ");
        Map<String, Integer> wordsMAp = new HashMap<>();
        for (String str : arr) {
            if (wordsMAp.containsKey(str)) {
                Integer amount = wordsMAp.get(str);
                wordsMAp.put(str, ++amount);
            } else {
                wordsMAp.put(str, 1);
            }
        }
        ValueComparator bvc = new ValueComparator(wordsMAp);
        TreeMap<String, Integer> sorted_map = new TreeMap<String, Integer>(bvc);
        sorted_map.putAll(wordsMAp);                               
        for (Map.Entry<String, Integer> entry : sorted_map.entrySet()) {
            System.out.println("The word: " + entry.getKey() + " was occurred " + entry.getValue() + " times");
        }
    }
}

class ValueComparator implements Comparator<String> {
    Map<String, Integer> base;
    
    public ValueComparator(Map<String, Integer> base) {
        this.base = base;
    }

    // Note: this comparator imposes orderings that are inconsistent with equals.    
    public int compare(String a, String b) {
        if (base.get(a) >= base.get(b)) {
            return -1;
        } else {
            return 1;
        } // returning 0 would merge keys
    }
}

Вывод:
Код

The word: a was occurred 4 times
The word: mila was occurred 3 times
The word: rama was occurred 2 times
The word: papu was occurred 1 times
The word: mama was occurred 1 times



--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
PSImozg
Дата 19.1.2014, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 29.12.2013

Репутация: нет
Всего: нет



Огромное всем спасибо за помощь, вы очень сильно мне помогли. Буду теперь сидеть разбираться как оно работает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0713 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.