什么';这是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。