什么';这是java代码的错误,因为hashmap根据值的数量存储密钥

什么';这是java代码的错误,因为hashmap根据值的数量存储密钥,java,hashmap,Java,Hashmap,输入如下:- 2 3 2 piygu ezyfo rzotm 1 piygu 6 tefwz tefwz piygu ezyfo tefwz piygu 4 1 kssdy tjzhy ljzym kegqz 4 kegqz kegqz kegqz vxvyj 第一个输入是测试用例的数量。第二行有两个整数(n&k)。第一个(n)是指字数。第二个整数(k)表示下一行数。 然后下一行包含n个单词。然后是他们的k线。每行有一个整数(l),表示同一行中的字数。问题是根据第一行中的单词在其他行中是否可用

输入如下:-

2
3 2
piygu ezyfo rzotm
1 piygu
6 tefwz tefwz piygu ezyfo tefwz piygu
4 1
kssdy tjzhy ljzym kegqz
4 kegqz kegqz kegqz vxvyj
第一个输入是测试用例的数量。第二行有两个整数(n&k)。第一个(n)是指字数。第二个整数(k)表示下一行数。 然后下一行包含n个单词。然后是他们的k线。每行有一个整数(l),表示同一行中的字数。问题是根据第一行中的单词在其他行中是否可用,打印“是”或“否”

import java.util.*;
public class ForgottenLanguage {
public static void main(String args[]) {
    Scanner sc=new Scanner(System.in);
    int t=sc.nextInt();
    while(t-->0) {
        int n=sc.nextInt();
        int k=sc.nextInt();
        sc.nextLine();
        HashMap<String,String> hashmap=new HashMap<String,String>();
        for(int i=0;i<n;i++) {
            String a=sc.next();
            hashmap.put(a,"NO");
        }
        sc.nextLine();
        while(k-->0) {
            int l=sc.nextInt();
            for(int i=0;i<l;i++) {
                String st=sc.next();
                if(hashmap.containsKey(st)) {
                    hashmap.put(st, "YES");
                }
            }
              
            for(String s:hashmap.keySet()) {
                System.out.print(hashmap.get(s)+" ");
            }
        }
    }
    sc.close();
}
}
而不是像下面这样得到它

YES NO NO YES YES NO 
NO NO YES NO 
是是不是

不,不,不,是的

  • 改进:
    Map
    在这种情况下很难维护。要更改它,请使用
    Map
  • 更正:
    要维持实际订单,请使用
    LinkedHashMap
    HashMap
    类不维护元素的
    顺序。这就是为什么上一次的输出不如预期的原因
  • 更正:
    不要在
    第二个循环
    内打印(
    系统输出
    ),而是在第二个循环
    完成后打印数据
  • 代码的修改版本:

    import java.util.LinkedHashMap;
    import java.util.Map;
    import java.util.Scanner;
    
    public class ForgottenLanguage {
        
        public static void main(String args[]) {
            Scanner sc = new Scanner(System.in);
            int t = sc.nextInt();
            while (t-- > 0) {
                int n = sc.nextInt();
                int k = sc.nextInt();
                sc.nextLine();
                Map<String, Boolean> linkedHashmap = new LinkedHashMap<String, Boolean>();
                for (int i = 0; i < n; i++) {
                    String a = sc.next();
                    linkedHashmap.put(a, false);
                }
                sc.nextLine();
                while (k-- > 0) {
                    int l = sc.nextInt();
                    for (int i = 0; i < l; i++) {
                        String st = sc.next();
                        if (linkedHashmap.containsKey(st)) {
                            linkedHashmap.put(st, true);
                        }
                    }
                    //remove printing logic from here
                }
                
                for (Map.Entry<String, Boolean> entry : linkedHashmap.entrySet())
                {
                    if(entry.getValue()) {
                        System.out.print("YES" + " ");
                    }else {
                        System.out.print("NO" + " ");
                    }
                }
            }
            sc.close();
        }
    }
    
  • 改进:
    Map
    在这种情况下很难维护。要更改它,请使用
    Map
  • 更正:
    要维持实际订单,请使用
    LinkedHashMap
    HashMap
    类不维护元素的
    顺序。这就是为什么上一次的输出不如预期的原因
  • 更正:
    不要在
    第二个循环
    内打印(
    系统输出
    ),而是在第二个循环
    完成后打印数据
  • 代码的修改版本:

    import java.util.LinkedHashMap;
    import java.util.Map;
    import java.util.Scanner;
    
    public class ForgottenLanguage {
        
        public static void main(String args[]) {
            Scanner sc = new Scanner(System.in);
            int t = sc.nextInt();
            while (t-- > 0) {
                int n = sc.nextInt();
                int k = sc.nextInt();
                sc.nextLine();
                Map<String, Boolean> linkedHashmap = new LinkedHashMap<String, Boolean>();
                for (int i = 0; i < n; i++) {
                    String a = sc.next();
                    linkedHashmap.put(a, false);
                }
                sc.nextLine();
                while (k-- > 0) {
                    int l = sc.nextInt();
                    for (int i = 0; i < l; i++) {
                        String st = sc.next();
                        if (linkedHashmap.containsKey(st)) {
                            linkedHashmap.put(st, true);
                        }
                    }
                    //remove printing logic from here
                }
                
                for (Map.Entry<String, Boolean> entry : linkedHashmap.entrySet())
                {
                    if(entry.getValue()) {
                        System.out.print("YES" + " ");
                    }else {
                        System.out.print("NO" + " ");
                    }
                }
            }
            sc.close();
        }
    }
    

    好吧,你在地图上添加了很多NO-then-YES字符串,然后打印出来。我认为你应该退后一步,重新思考你想要发生什么。然后:请阅读关于使用标记进行格式化的帮助。预览窗口告诉您,您的内容看起来不像是您将其放入问题中的。所以:请花时间格式化您的输入,使其可读,并显示您想要的方式。最后:请注意您的“预期输出”。。。这只是你的意见。所以:你的问题不清楚。Hi@GhostCat对于每个字符串的第一行,我必须打印是或否,所以我使用这个为第一行中的所有字符串添加了否(int i=0;i@SiaSaxena这在你的问题中并不明显。你谈到了可用的单词,这可能意味着很多事情。请改写你的问题,使其更易于理解。我不认为如果你使用更好的输入对象,这些数字中的任何一个都是必要的。我会使用BufferedReader而不是Scanner。好的l、 你在地图上添加了很多“否-然后是”的字符串,然后打印出来。我认为你应该后退一步,重新考虑一下你希望发生什么。然后:请阅读关于使用标记进行格式化的帮助。预览窗口告诉你,你的内容看起来不像是你提出的问题。因此:请花时间格式化你的内容最后:请注意,您的“预期输出”…只是您的输入。因此:您的问题不清楚。Hi@GhostCat对于每个字符串的第一行,我必须打印“是”或“否”,因此我使用此选项为第一行中的所有字符串添加了“否”(int i=0;i@SiaSaxena这在你的问题中并不明显。你谈到了可用的单词,这可能意味着很多事情。请改写你的问题,使其更易于理解。我不认为如果你使用更好的输入对象,这些数字中的任何一个都是必要的。我会使用BufferedReader而不是Scanner。