java - 为什么我的打印线无法工作?

标签 java

我希望这个程序能够按字母顺序对困惑的单词进行排序,与字典进行比较,并与字典单词进行匹配。我让它按字母顺序打印出困惑的内容,但即使我有打印行,它也不会打印字典单词。

public class i
{
public static void main(String[] args) throws Exception
{
    if (args.length < 2 ) die("No dictionary");

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


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

    while(dictionaryFile.ready())
    {
        String dictWord = dictionaryFile.readLine(); 
        dictionaryWords.add(dictWord);
    }

    while(jumbleFile.ready())
    {
        String word = jumbleFile.readLine();
        //String canWord = toCanonical(word); 
        jumbleWords.add(word); 
        map.put(word, new ArrayList<String>()); 
    }
    Collections.sort(jumbleWords); 

    for(String dictionaryWord : dictionaryWords)
    {
        String canDictWord = toCanonical(dictionaryWord); 
        if(map.containsValue(canDictWord))
        {
            ArrayList<String> listOfWords = map.get(canDictWord); 
            listOfWords.add(dictionaryWord);
        }
    }
        ArrayList<String> keysList = new ArrayList(map.keySet());
        Collections.sort(keysList);
        for(String key : keysList)
        {
            System.out.print(key); 

            ArrayList<String> list = map.get(key);
            Collections.sort(list);
        for(String word : list)
                {
                   if (toCanonical(key).equals(toCanonical(word)))
                    System.out.print(word + " ");   
                }
            System.out.println(); 
        }


} 

private static void die( String errmsg )
{
            System.out.println( "\nFATAL ERROR: " + errmsg + "\n" );
            System.exit(0);
}

private static String toCanonical( String word )
{
    char[] letters = word.toCharArray();
    Arrays.sort(letters);
    return new String(letters);    
}
} 

最佳答案

map 的值定义为 ArrayList<String> 类型,但在下面的代码中,您尝试检查它是否包含常规 String .

if(map.containsValue(canDictWord)) {
    // ...
}

这将始终返回 false,因此您的 println 的原因不起作用是因为 map 的值 ArrayList s 将始终为空。

很难弄清楚您实际上想要实现的目标,并且代码的格式(或缺乏格式)使其变得更加困难。您可能应该尝试制作一个 map ,其中字典单词作为键,而困惑的单词作为值列表。然后你可以使用map.containsKey(toCanonical(jumbledWord))并将困惑的单词添加到该键的值列表中。

关于java - 为什么我的打印线无法工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29838548/

相关文章:

java - 链接的阻塞队列中的值未正确传递

java - Spring框架-如何将目录作为资源注入(inject)?

java - jQuery click() 处理程序未按预期工作

java - 在没有 Entity Framework 的情况下构建 OData API

Java LinkedList 在其源代码中具有空构造函数

java - GlassFish server 5.1 可以用 JDK15 启动吗?

java - 未找到带有 URI 调度程序错误的 HTTP 请求的映射

java - 如何实现@RequestMapping 自定义属性

java - JAXB - TreeGrid 解决 XmlElement 冲突

java - 如果发生异常,如何重试 try block 中的特定代码段?