【问题标题】:Java program to read Strings from console and print the String with maximum number of words in itJava 程序从控制台读取字符串并打印其中包含最大字数的字符串
【发布时间】:2019-03-08 11:08:36
【问题描述】:

我正在尝试解决一个编程难题。在这里,用户应该从控制台读取 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;

    } 
}

【问题讨论】:

  • 您的entrySet() 返回一个Set&lt;Map.Entry&lt;String,Integer&gt;&gt;
  • 遇到了什么问题,为什么要尝试将其转换为 hashmap?
  • 就目前而言,您的应用程序甚至没有到达关键部分
  • @Stultuske 我正在练习地图实现。因此,使用 Map 的实现。
  • @XtremeBaumer:非常感谢您的指导。

标签: java string collections linked-list hashmap


【解决方案1】:

您当前的代码有很多问题。与其试图挽救您当前的方法,我建议您在进行过程中跟踪正在运行的最长字符串:

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");

【讨论】:

  • 嗨,我正在练习集合概念,并希望仅使用地图来实现此逻辑。您能否就相同的实现给我建议?
【解决方案2】:

(HashMap) printResult.entrySet()

在这里您尝试将 EntrySet 转换为 Hashmap,这不起作用。只需删除您的演员并替换您的左侧类型

Map.Entry<String,Integer> 

Set<Map.Entry<String,Integer>>

【讨论】:

  • 不工作。错误如下: error: cannot find symbol Set> entry = (Set>)printResult.entrySet();符号:方法 entrySet() prog.java:34:错误:找不到符号 System.out.println(entry.getKey()); ^ 符号:方法 getKey() 等,
猜你喜欢
  • 1970-01-01
  • 2019-03-25
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多