Java-программа для чтения строк из консоли и печати строки с максимальным количеством слов в ней - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь решить задачу программирования. Здесь пользователь должен прочитать n строк в консоли и напечатать строку, содержащую максимальное количество слов.

При попытке преобразовать List в HashMap

возникают проблемы с преобразованием.

Ошибка:

prog.java:33: error: incompatible types: HashMap<String,Integer> cannot be converted to Entry<String,Integer>
Map.Entry<String,Integer> entry = (HashMap<String,Integer> ) printResult.entrySet();

Мой код выглядит следующим образом:

import java.io.*;

import java.util.*;

import java.util.LinkedList; 


class GFG {


public static void main (String[] args) {

    int i=0,counter=0;
    String[] strArray= new String[10];
    Scanner sn = new Scanner(System.in);
    HashMap<String, Integer> hm = new HashMap<String, Integer>();
    while(sn.nextLine()!=null)
    {
        strArray[i]=sn.nextLine();
        String temp=strArray[i];
        int j=0;
        while(j<temp.length())
        {
            if(temp.charAt(j)==' ')
            {
                counter++;
            }
            j++;
        }
       hm.put(temp,counter); 
       i++;
    }
    GFG g1=new GFG();
    HashMap<String, Integer> printResult = g1.sortByValue(hm);
    Map.Entry<String,Integer> entry = (HashMap<String,Integer> ) printResult.entrySet();
    System.out.println(entry.getKey());
}
    public HashMap<String, Integer> sortByValue(HashMap<String, Integer> hm) 
    { 
    // Create a list from elements of HashMap 
    List<Map.Entry<String, Integer> > list = 
           new LinkedList<Map.Entry<String, Integer> >(hm.entrySet()); 

    // Sort the list 
    Collections.sort(list, new Comparator<Map.Entry<String, Integer> >() { 
        public int compare(Map.Entry<String, Integer> o1,  
                           Map.Entry<String, Integer> o2) 
        { 
            return (o1.getValue()).compareTo(o2.getValue()); 
        } 
    }); 


    Map<String,Integer> printResult = (HashMap<String, Integer>) list.getLast();
    System.out.println(printResult);
    return printResult;

    } 
}

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

(HashMap) printResult.entrySet ()

Здесь вы пытаетесь привести EntrySet к Hashmap, это не работает.Просто удалите свой актерский состав и замените тип левой руки

Map.Entry<String,Integer> 

на

Set<Map.Entry<String,Integer>>
0 голосов
/ 08 марта 2019

Ваш текущий код имеет много проблем. Вместо того, чтобы пытаться спасти ваш текущий подход, я рекомендую отслеживать самую длинную строку по ходу:

int longest = 0;
String str;
String next = sn.nextLine();

while (!"END".equals(next)) {
    int length = next.split("\\s+").length;
    if (length > longest) {
        longest = length;
        str = next;
    }

    // enter END to end the loop/program
    next = sn.nextLine();
}

System.out.println("longest string: " + str);
System.out.println("has " + longest + " words");
...