我想打印从扫描仪对象到达的所选键和值。我以这种方式尝试过,但发现有所不同:

    TreeMap<String, String> oldbooks = new TreeMap<String,String>();
    oldbooks.put("WaltDisney", "DonaldDuck");
    oldbooks.put("Shakespeare", "Amleto");
    oldbooksput("Dickens", "OliverTwist");

    Scanner in = new Scanner(System.in);
    String title = in.next();
    boolean found =             oldbooks.containsValue(title);
    for(String k : oldbooks.keySet())
    {
        if(found) {
            System.out.print("The value is : "+ oldbooks.get(k)
            +" The Key is: "+ k);
        }
    }


我注意到以这种方式,我可以获得每个键和每个值,我想要正确的键和正确的值。如果我更改if条件,然后输入:

if(title.equals(oldbooks.get(k))


现在,它的功能非常好。那么,为什么我不能用第一个解决方案打印指定的值和键?我知道.equals会给我真与假,就像containsValue一样。
先感谢您。

最佳答案

根据您的编辑,您正在将值放在其他映射archivio中,并尝试在其他映射oldbooks中进行搜索。

那是故意的吗?也许这就是代码中的问题!

下面的代码对我来说很好用;

    TreeMap<String, String> oldbooks = new TreeMap<>();
    oldbooks.put("WaltDisney", "DonaldDuck");
    oldbooks.put("Shakespeare", "Amleto");
    oldbooks.put("Dickens", "OliverTwist");

    Scanner in = new Scanner(System.in);
    String title = in.next();
    boolean found = oldbooks.containsValue(title);
    for(String k : oldbooks.keySet())
    {
        if(found) {
            System.out.print("The value is: "+ oldbooks.get(k)
            +" The Key is: "+ k);
        }
    }


当我在IDE中运行此代码时,只需要在控制台中键入DonaldDuck即可得到预期的结果(打印所有键值对)。

另外,仅供参考,您在system.out.print语句中打印的键值不正确。

密钥是k,值是您使用oldbooks.get(k)获得的值。并非相反。 (如第一条评论中的@ dan1st所示)。

08-06 15:51