如何使用Hashmap对字典中混乱的单词进行排序

时间:2015-04-24 01:48:37

标签: java hashmap

我无法编译程序。我要做的是让程序打印出所有混乱的单词,并在其旁边打印出可以制作的字典单词。我认为我嵌套循环的方式有误,但我无法弄明白。有人能帮我一把吗?

    public static void main(String[] args) throws Exception
     {
     if (args.length < 2) die("Must give name of two input files on cmd line.");

    BufferedReader dictionaryFile = new BufferedReader( new FileReader( args[0] ));
    BufferedReader jumbleFile = new BufferedReader( new FileReader(args[0] ));

    HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
    ArrayList<String> jumbleWords = new ArrayList<String>();
    ArrayList<String> dictionaryWords = new ArrayList<String>(); 
    ArrayList<String> keysList = new ArrayList<String>();

    while(jumbleFile.ready())
    {
        String jWord=jumbleFile.readLine();
        jumbleWords.add(jWord);
    }
    jumbleFile.close();

    Collections.sort(jumbleWords);

    while(dictionaryFile.ready())
    {
        String dWord= dictionaryFile.readLine();
        String dictWord= toCanonical(dWord);
        if(map.containsKey(dictWord))
        {
            map.get(dictWord);
            map.put(dWord, map.get(dictWord));
        }
        else
        {
            ArrayList<String> dictionaryWords2 = new ArrayList<String>();
            dictionaryWords2.add(dWord);
            map.put(dictWord, dictionaryWords2);

    }
        for( String i : map.keySet())
        {
            keysList.add(i);    
        }
        Collections.sort(keysList);

        for (String key :  keysList)
        {
            System.out.print(key);
            String toCanJWord= toCanonical(key);
            if(map.containsKey(toCanJWord))
            {
                map.get(toCanJWord);
                Collections.sort(map.get(toCanJWord));
                for(map.get(toCanJWord))
                {
                        System.out.print(toCanJWord);
                }
          }

            System.out.println();
}




private static String toCanonical( String word )
{
    char[] letters = word.toCharArray();
    Arrays.sort(letters);
    return new String(letters);    
}
 private static void die( String errmsg )
    {
                System.out.println( "\nFATAL ERROR: " + errmsg + "\n" );
                System.exit(0);
    }
}`

2 个答案:

答案 0 :(得分:1)

你有几个问题。首先,您在}的末尾错过了for loop

for (String key :  keysList)
        {
            System.out.print(key);
            String toCanJWord = toCanonical(key);
            if(map.containsKey(toCanJWord))
            {
                map.get(toCanJWord);
                Collections.sort(map.get(toCanJWord));
                //this isn't correct. Not sure what you are trying to do here
                //but this is why it won't compile
                for(map.get(toCanJWord))
                {
                        System.out.print(toCanJWord);
                }
          }

    }//missing this closing bracket

你的for循环也有问题,请参阅评论。

答案 1 :(得分:1)

您的for循环错误:

for(map.get(toCanJWord))
{
   System.out.print(toCanJWord);
}

它必须是以下格式:

for(String wordToPrint : map.get(toCanJWord))
{
   System.out.print(wordToPrint );
}